难度:中等
题目
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
解答
思路
动态规划, Xn+1=min(Xa*2,Xb*3,Xc*5)
知识点
代码
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> dp;
dp.push_back(1);
int last_position_2=0,last_position_3=0,last_position_5=0;
int valueX2,valueX3,valueX5;
int nextValue;
for(int i=1;i<n;i++)
{
valueX2=dp[last_position_2]*2;
valueX3=dp[last_position_3]*3;
valueX5=dp[last_position_5]*5;
nextValue = getMin(valueX2,valueX3,valueX5);
if(valueX2==nextValue)
{
last_position_2++;
}
if(valueX3==nextValue)
{
last_position_3++;
}
if(valueX5==nextValue)
{
last_position_5++;
}
dp.push_back(nextValue);
}
return dp[n-1];
}
private:
int getMin(int a,int b,int c)
{
int minValue=min(a,b);
minValue=min(minValue,c);
return minValue;
}
};