题目:
代码(首刷看解析 2024年4月1日):
class Solution {
public:
int nthUglyNumber(int n) {
// 最小堆,出堆(*2 *3 *5 检查是否重复再入堆)
// 哈希去重
unordered_set<long> seen;
priority_queue<long> pq;//存相反数变最小堆
pq.push(-1);
seen.insert(-1);
int count = 1;
while (count < n) {
// 最小值出堆,
long temp = pq.top();
//cout<<temp<<" ";
pq.pop();
count++;
// 计算临时值
long a = temp * 2;
long b = temp * 3;
long c = temp * 5;
// 入堆,加入哈希表
if (seen.find(a) == seen.end()) {
seen.insert(a);
pq.push(a);
}
if (seen.find(b) == seen.end()) {
seen.insert(b);
pq.push(b);
}
if (seen.find(c) == seen.end()) {
seen.insert(c);
pq.push(c);
}
}
return -pq.top();
}
};