[LintCode]4.丑数 II
来源:互联网 发布:highcharts.js api 编辑:程序博客网 时间:2024/06/05 09:39
设计一个算法,找出只含素因子2
,3
,5
的第 n 大的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12..
注意事项
我们可以认为
1
也是一个丑数
样例
参考:http://blog.csdn.net/lhanchao/article/details/52079323
如果n = 9
, 返回 10
只包含因子2,3,5 的数称为丑数 。
)
思路:从第二个数开始,每一个数为第p2个数的二倍、第p3个数的三倍、第p5个数的五倍中最小的一个(初始p2/p3/p5都为第一个丑数
直接寻找丑数,由丑数的定义可知,任何一个丑数都是2^i * 3^j * 5^m这种形式的,因此不断寻找丑数,将他们按从小到大的顺序进行排列,
直到第n个即为结果。首先定义一个数组存放丑数,认为1是丑数,则初始化数组num[0] = 1,然后从2,3,5这三个种子中挑选,选择num[0]*2,
num[0]*3,num[0]*5中最小的数为新的丑数,显然应该选择2,即num[1] = 2,然后在从2,3,5中选择,这时应该是从num[1]*2,num[0]*3,
num[0]*5中进行选择,显然选择3,即num[2] = 3,然后再从num[1]*2,num[1]*3,num[0]*5中选择最小的,选择2,即num[3] = 4,
依次进行如下操作,得到最终的结果。
class Solution {public: /* * @param n: An integer * @return: the nth prime number as description. */ int nthUglyNumber(int n) { vector<int> Num(n); Num[0] = 1; int p2 = 0; int p3 = 0; int p5 = 0; for(int i = 1;i<n;i++) { Num[i] = min(min(Num[p2]*2,Num[p3]*3),Num[p5]*5); //找出是2,3,5中哪个计算出的Num[i],若2,3都能得出时,需要p2++,p3++ if(Num[i] / Num[p2] == 2) p2 ++; if(Num[i] / Num[p3] == 3) p3 ++; if(Num[i] / Num[p5] == 5) p5 ++; } return Num[n-1]; }};
参考:http://blog.csdn.net/lhanchao/article/details/52079323
阅读全文
0 0
- [LintCode]4.丑数 II
- LintCode----4.丑数II
- LintCode 4.丑数 II
- lintcode-丑数 II
- LintCode 4 丑数II
- LintCode Python 丑数II
- **[Lintcode]Ugly Number II 丑数 II
- lintcode 4.丑数 II(优先队列)
- (lintcode)第4题 丑数II
- lintcode4-4. 丑数 II
- LintCode笔记(8)——丑数II
- LintCode python 小白6-丑数 II
- 丑数、丑数 II
- LintCode 丑数
- LintCode-丑数
- LintCode:超级丑数
- LintCode 517 丑数
- LintCode.517.丑数
- c++实现LogisticRegression/用c++实现逻辑回归
- POJ 3321 树状数组+DFS
- 大家好!刚开通博客,和大家打个招呼,\(^o^)/
- ubuntu eigen 安装与使用
- HDU_6152 Friend-Graph 【暴力】
- [LintCode]4.丑数 II
- 页面弹出层组件layer的用法
- 经济编码
- 字符串问题---数组中两个字符串的最小距离
- Friend-Graph (暴力)
- 河南省多校连萌(四)
- Sublime Text3 中文版 错误:There are no packages available for installation
- linux下git的使用
- No Module Named '_pywrap_tensorflow_internal'