剑指 Offer 49. 丑数

//动态规划
class Solution {
    public int nthUglyNumber(int n) {  
        //定义一个数组dp,来按序存放丑数
        int[] dp = new int[n];
        //第一个丑数是1
        dp[0] = 1;
        //分别定义由质因子 2,3,5 乘以较小丑数得到的下标索引
        int a2=0,a3=0,a5=0;
        //遍历,找丑数
        for(int i=1;i<n;i++){
            //最小的丑数排在最前
            dp[i] = Math.min(Math.min(dp[a2]*2,dp[a3]*3),dp[a5]*5);
            //更新索引
            if(dp[i] == dp[a2]*2) a2++;
            if(dp[i] == dp[a3]*3) a3++;
            if(dp[i] == dp[a5]*5) a5++;
        }
        return dp[n-1];
    }
}

 

posted @ 2020-12-16 21:01  peanut_zh  阅读(115)  评论(0编辑  收藏  举报