剑指Offer--丑数

来源:互联网 发布:贵州省网络测评中心 编辑:程序博客网 时间:2024/05/23 12:08

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


public class 丑数 {public static void main(String[] args) {// TODO Auto-generated method stubSystem.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 stubint min = (i>j)?j:i;return min>k?k:min;}}


原创粉丝点击