第一时间没想出来。
丑数是由2 3 5 相乘得到的。那么就可以回溯计算前n个丑数。初始值是1,1*2,3,5 拿到最大值2,当做第二个数。下一次就是1*3,1*5和2*2相比较拿到最大值。可以看做是三个数列,拿他们的头部作比较,从小到大排序。三个数列分别是由一个array数列每一位乘2 3 5 得到的。array数列是动态构造出来的,拿第i个丑数当做array【i-1】。
class Solution {
public int nthUglyNumber(int n) {
int i = 0;
int j = 0;
int k = 0;
int min = 0;
int[] array = new int[n+1];
array[0]=1;
for(int t = 0; t < n; t++){
min = array[i]*2<array[j]*3 ? array[i]*2 : array[j]*3 ;
min = min<array[k]*5 ? min : array[k]*5;
array[t+1]=min;
if(array[i]*2==min){
i++;
}
if(array[j]*3==min){
j++;
}
if(array[k]*5==min){
k++;
}
}
return array[n-1];
}
}