原题网址:http://www.lintcode.com/zh-cn/problem/ugly-number-ii/
设计一个算法,找出只含素因子2
,3
,5
的第 n 小的数。
符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...
注意事项
我们可以认为1
也是一个丑数
样例
如果n = 9
, 返回 10
挑战
要求时间复杂度为O(nlogn)或者O(n)
1 #include <iostream> 2 #include <vector> 3 #include <math.h> 4 using namespace std; 5 6 int nthUglyNumber(int n) //找第n个丑数; 7 { 8 int *num=new int[n]; 9 10 num[0]=1; 11 int n_2=0; 12 int n_3=0; 13 int n_5=0; 14 for (int i=1;i<n;i++) 15 { 16 num[i]=min(min(num[n_2]*2, num[n_3]*3) , num[n_5]*5); 17 if (num[i]/num[n_2]==2) 18 { 19 n_2++; 20 } 21 if (num[i]/num[n_3]==3) 22 { 23 n_3++; 24 } 25 if (num[i]/num[n_5]==5) 26 { 27 n_5++; 28 } 29 } 30 31 return num[n-1]; 32 }
参考:
1、 https://blog.csdn.net/guoziqing506/article/details/52347140
2、 https://blog.csdn.net/leex_brave/article/details/51766194