//-----------运行超时-------------https://www.jianshu.com/p/a56fc45c1c9a-----------
//所谓一个数m是另一个数n的因子,是指n能被m整除,也就是说n%m==0.
//根据丑数的定义,丑数只能被2,3,5整除。也就是说如果一个数能被2整除,我们把它连续除以2;
//如果能被3整除,就连续除以3;如果能被5整除,就除以5.如果最后我们得到的是1,那么这个数就是丑数,否则不是。
public static boolean isUgly(int number){
while(number%2==0)
number/=2;
while(number%3==0)
number/=3;
while(number%5==0)
number/=5;
return number==1 ? true : false;
}
public static int getUglyNumber(int index){
if(index<=0){
return 0;
}
int number=0;
int UglyFound=0;
while(UglyFound<index){
number++;
if(isUgly(number)){
++UglyFound;
}
}
return number;
}
//https://blog.csdn.net/wszy1301/article/details/80910626
public static int GetUglyNumber_Solution(int index){
if(index<=0){
return 0;
}
int[] res=new int[index];
res[0]=1;//先把1放入
int m2=0;//制乘以2的位置,假设得到一个丑数是乘以2得到的,那么下一次就是数组中的下一个丑数可能达到。
int m3=0;
int m5=0;
for(int i=1;i<index;i++){
int min=Math.min(res[m2]*2, Math.min(res[m3]*3,res[m5]*5));
res[i]=min;
if(min==res[m2]*2){
//假设res[1]是乘以2得到的丑数,那么下一次就要判断
//是否是res[2]乘以2可能得到丑数,所以就要++
m2++;
}
if(min==res[m3]*3){
m3++;
}
if(min==res[m5]*5){
m5++;
}
}
return res[index-1];
}