后面的数可以由前面的数生成
丑数
http://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
后面的数可以由前的数生成,下一个数应该是最接近前一个数的,所以,下一个数=min(x3,x5,x*2)
/***
* 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
* 习惯上我们把1当做是第一个丑数。
* 求按从小到大的顺序的第N个丑数。
* @param index N
* @return 第N个丑数
*/
public int GetUglyNumber_Solution(int index) {
if(index<=0){
return 0;
}
int a=1,b=1,c=1;
int[] dp=new int[index+1];
dp[1]=1;
for(int i=2;i<=index;i++){
int n2=dp[a]*2,n3=dp[b]*3,n5=dp[c]*5;
dp[i]=Math.min(n2,Math.min(n3,n5));
if(dp[i]==n2){
a++;
}
if(dp[i]==n3){
b++;
}
if(dp[i]==n5){
c++;
}
}
return dp[index];
}
查看22道真题和解析