1 题目描述

  把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

2 思路和方法

  数值:1  2(1*2)  3(1*3)  4(2*2)   5 (1*5)       6(3*2)  8(4*2)  9(3*3)  10(5*2),……,可见1以后的丑数都是前面的丑数乘以2、3或者5。

  因为丑数只包含质因子2,3,5,假设我们已经有n-1个丑数,按照顺序排列,且第n-1的丑数为M。那么第n个丑数一定是由这n-1个丑数分别乘以2,3,5,得到的所有大于M的结果中,最小的那个数。

  newNum = min(arr[p2] * 2, min(arr[p3] * 3, arr[p5] * 5));  if(arr[p2] * 2 == newNum) p2++;

  存在某个最小值T2(<M),而arr[p2] * 2=T2,同理,也存在这样的数T3,T5,我们只需要标记这三个数即可。

3 C++核心代码

 class Solution {
public:
int GetUglyNumber_Solution(int index) {
// 0-6的丑数分别为0-6
if(index < ) return index;
//p2,p3,p5分别为三个队列的指针,newNum为从队列头选出来的最小数
int p2 = , p3 = , p5 = , newNum = ;
vector<int> arr;
arr.push_back(newNum);
while(arr.size() < index) {
//选出三个队列头最小的数
newNum = min(arr[p2] * , min(arr[p3] * , arr[p5] * ));
//这三个if有可能进入一个或者多个,进入多个是三个队列头最小的数有多个的情况
if(arr[p2] * == newNum) p2++;
if(arr[p3] * == newNum) p3++;
if(arr[p5] * == newNum) p5++;
arr.push_back(newNum);
}
return newNum;
}
};

参考资料

https://blog.csdn.net/Fly_as_tadpole/article/details/82705774

最新文章

  1. Android自定义Dialog(美化界面)
  2. php 代码优化提高MySQl的运行效率
  3. SNF开发平台WinForm之十-Excel导入-SNF快速开发平台3.3-Spring.Net.Framework
  4. C#面向对象面试题集锦
  5. Django开发博客- 部署
  6. HTTP协议中TCP的三次握手,四次挥手总结
  7. 【转】VS2012发布网站详细步骤
  8. WordPress Xhanch - My Twitter插件跨站请求伪造漏洞(CVE-2013-3253)
  9. iOS最好用的弹出框
  10. NodeJs之http
  11. jdk源码阅读笔记-HashMap
  12. Fetch API &amp; Async Await
  13. gradle 打包springboot项目,找不到项目jar application.class
  14. ORACLE 快速刷新物化视图的方法(11g)
  15. GDC2017 把“现实的天空”在游戏内再现【Forza Horizon 3】的天空表现
  16. INT_MAX和INT_MIN注意事项
  17. Linux 命令find、grep
  18. c# 解析json 字符串 报异常 Bad JSON escape sequence 解决方案
  19. redhat5本地源NBD驱动安装
  20. ansible基本模块-command

热门文章

  1. Java-Maven(九):Maven 项目pom文件引入工程根目录下lib文件夹下的jar包
  2. css3的选择器有哪几种?
  3. https://suchprogramming.com/epoll-in-3-easy-steps/
  4. Java对象为啥要实现Serializable接口
  5. XSS平台-学习
  6. PHP7 MongoDB 使用方法
  7. 禁止select标签选择,禁止select组件change值
  8. Flutter Offstage、Visibility隐藏/可见
  9. 编写第一个dart程序hello dart
  10. 泡泡一分钟:LandmarkBoost: Efficient Visual Context Classifiers for Robust Localization