把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
public int GetUglyNumber_Solution(int n){
if(n< 6){
return n;
}
// 用3个数分别记录当前2、3、5最多的个数
int n2 = 0;
int n3 = 0;
int n5 = 0;
int []rt = new int [n];
rt[0] = 1;
for(int i = 1; i< n;i++) {
int r2 = rt[n2] * 2;
int r3 = rt[n3] * 3;
int r5 = rt[n5] * 5;
rt[i] = Math.min(r2, Math.min(r3, r5));
if(rt[i] == r2){
n2 ++;
}
if(rt[i] == r3){
n3++;
}
if(rt[i] == r5){
n5++;
}
}
return rt[n - 1];
}