题目
思考
这是一道结合了数学的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();
}
};

本文探讨LeetCode上Ugly Number题目,采用动态规划方法寻找由2、3、5因子组成的第n个丑数。文章详细解析了数学原理与算法实现,包括如何通过源数字乘以2、3、5进行有效排序。
521

被折叠的 条评论
为什么被折叠?



