动态规划:剑指 Offer 49. 丑数

题目描述:

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

 

 

因此,可设置指针 a,b,c 指向首个丑数(即 1 ),循环根据递推公式得到下个丑数,并每轮将对应指针执行 +1 即可。

 

 

class Solution{
    public int nthUglyNumber(int n){
        int a=0,b=0,c=0;//初始化
        int dp[] = new int[n];//状态定义
        dp[0]=1;//初始化
        for(int i=1;i<n;i++){
            int n2=dp[a]*2,n3=dp[b]*3,n5=dp[c]*5;
            dp[i] = Math.min(Math.min(n2,n3),n5);//状态转移
            if(dp[i]==n2) a++;
            if(dp[i]==n3) b++;
            if(dp[i]==n5) c++;
        }
        return dp[n-1];//返回值
    }
}

 

posted @ 2023-05-22 15:34  ZDREAMER  阅读(19)  评论(0)    收藏  举报