有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 5 输出: 9
小顶堆的建立:
priority_queue<long, vector<long>, greater<long>> (元素类型,容器,小顶堆)
class Solution {
public:
int getKthMagicNumber(int k) {
vector<int> factors = {3, 5, 7};
unordered_set<long> seen;
priority_queue<long, vector<long>, greater<long>> heap;
seen.insert(1L);
heap.push(1L);
int magic=0;
for(int i=0;i<k;i++){
long curr=heap.top();
heap.pop();
magic=(int)curr;
for(int factor:factors){
long next=curr*factor;
if(!seen.count(next)){
seen.insert(next);
heap.push(next);
}
}
}
return magic;
}
};