题目描述 :
当我们去遍历查找第n个丑数时 , 则会出现超出时间限制 ;
据观察可知丑数就相当于三个已排序数组的合集
1*2 2*2 3*2 4*2 5*2 6*2 8*2 .......'
1*3 2*3 3*3 4*3 5*3 6*3 8*3 .......
1*5 2*5 3*5 4*5 5*5 6*5 8*5 .......
当前丑数都是由上一个丑数乘以质因数得到的 , 那么下一个丑数就应该是上一个丑数乘以质因数的最小值 ,
代码如下 :
int nthUglyNumber(int n) {
int num[n];
if(n==1)
return 1;
num[0]=1;
int i=1;
int p2=0,p3=0,p5=0;
for(;i<n;i++){
//取出丑数乘以质因数后的最小值
int ret=num[p2]*2<num[p3]*3?num[p2]*2:num[p3]*3;
ret=ret<num[p5]*5?ret:num[p5]*5;
if(ret==num[p2]*2)
p2++;
if(ret==num[p3]*3)
p3++;
if(ret==num[p5]*5)
p5++;
num[i]=ret;
}
return num[n-1];
}