264. 丑数 II
题目链接:264. 丑数 II
该题与 LCR 168. 丑数 本质上是一个题。
代码如下:
//小根堆解法
//参考leetcode官方题解:https://leetcode.cn/problems/ugly-number-ii/solutions/712102/chou-shu-ii-by-leetcode-solution-uoqd
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> factors{2,3,5};
unordered_set<long> seen;//不排序,不含重复元素的集合
priority_queue<long,vector<long>,greater<long>> heap;//小根堆,不加greater<long>时,默认是大根堆
int res=0;
seen.insert(1L);
heap.push(1L);
for(int i=0;i<n;i++)
{
long cur=heap.top();
heap.pop();
res=cur;
for(int i=0;i<factors.size();i++)
{
long next=cur*factors[i];
if(seen.find(next)==seen.end())
{
seen.insert(next);
heap.push(next);
}
}
}
return res;
}
};
//动态数组+多路归并
//参考:https://leetcode.cn/problems/chou-shu-lcof/solutions/263122/chou-shu-ii-qing-xi-de-tui-dao-si-lu-by-mrsate
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> dp(n,0);
dp[0]=1;
int p2=0,p3=0,p5=0;
for(int i=1;i<n;i++)
{
dp[i]=min(min(dp[p2]*2,dp[p3]*3),dp[p5]*5);
if(dp[i]==dp[p2]*2)
p2++;
if(dp[i]==dp[p3]*3)
p3++;
if(dp[i]==dp[p5]*5)
p5++;
}
return dp[n-1];
}
};