力扣264.丑数II
-
因为1是最小丑数
- 丑数的2,3,5倍也一定是丑数
- 所以用最小堆存放丑数
- 每次取出堆顶元素 将其2,3,5倍(没遍历过的)加入堆
-
class Solution { public: int nthUglyNumber(int n) { vector<int> fac = {2,3,5}; 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<n;i++) { long cur = heap.top(); heap.pop(); //一个取一个 n次取到第n小 ugly = (int)cur; //2,3,5倍 for(int f : fac) { long next = cur * f; //之前没遍历过 if(!seen.count(next)) { seen.insert(next); heap.push(next); } } } return ugly; } };