您的位置:首页 > Web前端

剑指Offer--丑数

2017-08-08 16:27 267 查看
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

public class 丑数 {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(GetUglyNumber_Solution(7));
}

/*每一个丑数都是由前面的丑数乘以2,或者3,或者5得到的;开头第一个丑数是1,1乘以2,3,5得到的数里面最小的是2,所以dp[1]=2;
*但是3,5还没用到,因为他们比较大嘛。然后第三个丑数由上一个丑数2乘以2得到4 和3,5,比较。较小的是3 所以dp[2]=3
*继续下去就*/
public static int GetUglyNumber_Solution(int index) {
if (index==0||index<0) {
return 0;
}
int[] dp= new int[index];
dp[0] = 1;
int index2 = 0,index3 = 0, index5 = 0;
for (int i = 1; i < dp.length; i++) {
dp[i] = min(dp[index2]*2,dp[index3]*3,dp[index5]*5);
if (dp[index2]*2==dp[i]) index2++;
if (dp[index3]*3==dp[i]) index3++;
if (dp[index5]*5==dp[i]) index5++;
}

return dp[index-1];
}

private static int min(int i, int j, int k) {
// TODO Auto-generated method stub
int min = (i>j)?j:i;
return min>k?k:min;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: