利用动态规划的思想,记录2 3 5分别乘到了哪里,然后取最小作为新的数字。
class Solution {
public:
int nthUglyNumber(int n) {
int dp[n+1];
dp[1]=1;
int p2=1,p3=1,p5=1;
for(int i=2;i<=n;++i)
{
int num2 = dp[p2]*2,num3 = dp[p3]*3, num5=dp[p5]*5;
int num = min(min(num2,num3),num5);
if(num==num2)
++p2;
if(num==num3)
++p3;
if(num==num5)
++p5;
dp[i]=num;
}
return dp[n];
}
};