后面的数可以由前面的数生成
丑数
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]; }