动态规划:剑指 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];//返回值 } }

浙公网安备 33010602011771号