题目
思考
这是一道结合了数学的dp题
这道题里 dp[i]当然存放着满足条件的第i-1个数啦
需要知道以下数学知识:
任意一个自然数都可被分解为素数的乘积。
所以,为了使得他的因子都为2,3,5. 需要从源头开始乘以2,3,5
这里难点是把乘了之后的数排序
代码如下
代码
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> dp(1,1);
int i2=0;
int i3=0;
int i5=0;
while(dp.size()<n){
int n1=dp[i2]*2;
int n2=dp[i3]*3;
int n3=dp[i5]*5;
int min_num=min(n1,min(n2,n3));
if(min_num==n1) i2++;
if(min_num==n2) i3++;
if(min_num==n3) i5++;
dp.push_back(min_num);
}
return dp.back();
}
};