264. 丑数 II
264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
示例 1:
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
优先队列(小顶堆)
- 小顶堆:
priority_queue<int,vector<int>,greater<int>> myqueue;,升序队列,堆顶的元素最小。 - 大顶堆:
priority_queue<int,vector<int>,less<int>> myqueue;,降序队列,堆顶的元素最大。默认为大顶堆。 - 出栈:myqueue.pop() 弹出堆顶(队头)元素。
- 因此,丑数队列可用小顶堆构造,因为它只可能是2,3,5为因数,所以入栈的元素,为栈顶元素 * 2,* 3,* 5。
- 出栈出的是最小元素,因此只需要出栈
(n-1)次,留下的头顶元素即是第n个丑数。
class Solution {
public:
int nthUglyNumber(int n) {
priority_queue<double,vector<double>, greater<double>> myqueue;
double ans = 1;
for(int i = 1; i < n; ++i){
myqueue.push(ans*2);
myqueue.push(ans*3);
myqueue.push(ans*5);
ans = myqueue.top();
myqueue.pop();
while(!myqueue.empty() && ans == myqueue.top())
myqueue.pop();
}
return ans;
}
};

浙公网安备 33010602011771号