//Time:O(n),Space:O(n)
//动态规划版本的解题方法,类比,求解第n个斐波那契数列
class Solution
{
public:
//求解2个数中的最小数
int min(int a,int b)
{
return a<b?a:b;
}
//求解3个数中的最小数
int min(int a,int b,int c)
{
return min(a,b)<c?min(a,b):c;
}
//动态规划版解题思路
int nthUglyNumber(int n)
{
int ugly[n]={0};
ugly[0]=1;
int p2=0,p3=0,p5=0;
for(int i=1;i<n;i++)
{
int minValue=min(ugly[p2]*2,ugly[p3]*3,ugly[p5]*5);
ugly[i]=minValue;
if(ugly[p2]*2==minValue) p2++;
if(ugly[p3]*3==minValue) p3++;
if(ugly[p5]*5==minValue) p5++;
}
return ugly[n-1];
}
};