求出第n个丑数
丑数的意义就是因子只有2,3,5,也就是一个丑数必定是由另一个丑数乘2,3,5得到的,然后他要求第n个,那就从第1个开始求,一直求到第n个即可解决,那怎么求呢,规定第一个是1,那后面的就是1乘2,3,5,每一个丑数都可以得到3个新的丑数,所以要按顺序来选一个最小的丑数,因为每个数都要乘3次得到3个新丑数,所以设置3个指针。
分别标志这个数的这3次乘乘到哪了,用一个n次的循环来每次找一个丑数,如果找的是对应数的哪次乘,将这个指针后移,说明该下个数乘它了
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index<1)return 0;
if(index==1)return 1;
int[] x=new int[index];
x[0]=1;
int p2=0,p3=0,p5=0;
for(int i=1;i<index;i++){
x[i]=Math.min(2*x[p2],Math.min(3*x[p3],5*x[p5]));
if(x[i]==2*x[p2]) p2++;
if(x[i]==3*x[p3]) p3++;
if(x[i]==5*x[p5]) p5++;
}
return x[index-1];
}
}