如图所示:
JAVA代码如下:
package core;
public class UglyNum {
public static void main(String[] args){
long[] number = new long[1500]; //装载符合条件的数
long[] index = new long[1500]; //丑数可以相乘的数
number[0] = 1; //第一个丑数
index[0] = 2; //第一个丑数最开始可以相乘的数
long min_num =0;
long result = 0;
int mark = 0;//标记产生下个丑数的丑数
boolean is_first = true; //判断是否是第一个丑数
for(int i =0;i<1499;i++){
result = 0;
is_first = true;
for(int j = 0; j<i+1;j++){
if(index[j] != 0){
result = number[j]*index[j];
if(is_first){
min_num = result;
mark = j;
is_first = false;
}
if(min_num > result){
min_num = result;
mark = j;
}
}
}
number[i+1] = min_num; //添加下一个符合条件的丑数
if(number[i+1]%5==0){ //确定丑数可以相乘的数
index[i+1] = 5;
}else if(number[i+1]%3==0){
index[i+1] = 3;
}else{
index[i+1] = 2;
}
if(index[mark] == 2){ //原来丑数可以相乘的数减少一个
index[mark] =3;
}else if(index[mark] == 3){
index[mark] = 5;
}else if(index[mark] == 5){
index[mark] = 0;
}
}
System.out.println(number[1499]); //输出第1500个丑数
}
}