题目
给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
示例
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
输入:n = 1
输出:1
解释:1 通常被视为丑数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ugly-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:优先队列
Java实现
class Solution {
public int nthUglyNumber(int n) {
PriorityQueue<Long> q = new PriorityQueue<>();
Set<Long> set = new HashSet<>();
q.offer(1L);
set.add(1L);
long cur = 0;
while (n > 0) {
cur = q.poll();
if (set.add(cur * 2)) q.offer(cur * 2);
if (set.add(cur * 3)) q.offer(cur * 3);
if (set.add(cur * 5)) q.offer(cur * 5);
n--;
}
return (int)cur;
}
}