剑指offer三十三之丑数

一、题目

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

      注释: 8的因子有1,2,4,8,出去1和8以后,还有因子2,4。其中质数因子只有2,因此8是丑数

                 14的因子有1,2,7,14,出去1和14以后,还有因子2,7。其中质数因子有2,7,而7不是2,3,5这几个数,因此14不是丑数

二、思路

  动态规划,对于第i个数,它一定是之前已存在数的2倍,3倍或5倍

三、代码

import static java.lang.Math.min;

/**
 * 动态规划,对于第i个数,它一定是之前已存在数的2倍,3倍或5倍
 */
public class Solution {

    public int GetUglyNumber_Solution(int index) {

        if(index<=0){
            return 0;
        }

        int[] a=new int[index];

        a[0]=1;

        int index1=0;
        int index2=0;
        int index3=0;

        for(int i=1;i<index;i++){
            a[i]= min(a[index1]*2, min(a[index2]*3,a[index3]*5));
            if(a[i]==a[index1]*2){index1++;}
            if(a[i]==a[index2]*3){index2++;}
            if(a[i]==a[index3]*5){index3++;}
        }


        return a[index-1];
    }
}
View Code

---------------------------------------------

参考链接:

https://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b

posted @ 2017-10-12 00:43  AI菌  阅读(165)  评论(0编辑  收藏  举报