https://leetcode.cn/problems/get-kth-magic-number-lcci/ 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。 示例 1:

输入: k = 5
输出: 9

# 题解

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 ugly = 0;
for (int i = 0; i < k; i++) {
long curr = heap.top();
heap.pop();
ugly = (int)curr;
for (int factor : factors) {
long next = curr * factor;
if (!seen.count(next)) {
seen.insert(next);
heap.push(next);
}
}
}
return ugly;
}
};

复杂度分析:

  • 时间复杂度 \(O (klogk)\)
  • 空间复杂度 \(O (logk)\)