算法1
不对非丑数进行检测,只计算丑数
丑数应该是另外一个丑数*2或3或5
建立一个数组,里面都是排好序的丑数
然后设置三个参数Ugly2,Ugly3,Ugly5,分别代表这个数是当前的数是第几个丑数乘上2或3或5而成
每次都选出当前的数相乘得到的最小的丑数放进数据,然后三个参数之一自增
最后返回数组的最后一个值即可
Java 代码
class Solution {
public int getUglyNumber(int n) {
if(n<0)
return 0;
int[] Uglynums = new int[n];
Uglynums[0] = 1;
int Ugly2 = 0;
int Ugly3 = 0;
int Ugly5 = 0;
for(int i=1;i<n;i++){
int min= min(Uglynums[Ugly2]*2,Uglynums[Ugly3]*3,Uglynums[Ugly5]*5);
Uglynums[i] = min;
while(Uglynums[Ugly2]*2 == Uglynums[i])
Ugly2++;
while(Uglynums[Ugly3]*3 == Uglynums[i])
Ugly3++;
while(Uglynums[Ugly5]*5 == Uglynums[i])
Ugly5++;
}
return Uglynums[n-1];
}
public int min(int n2, int n3 ,int n5){
int min = n2<n3?n2:n3;
return min<n5?min:n5;
}
}