📅  最后修改于: 2023-12-03 14:54:35.114000             🧑  作者: Mango
纯数是指只有质因子2、3、5的正整数。找出第N个纯数的算法十分简单,可以利用优先队列(堆)的特性进行解决。
import heapq
def nth_ugly_number(n: int) -> int:
q = [1]
for i in range(n - 1):
num = heapq.heappop(q)
while q and q[0] == num:
num = heapq.heappop(q)
heapq.heappush(q, num * 2)
heapq.heappush(q, num * 3)
heapq.heappush(q, num * 5)
return q[0]
该算法的时间复杂度为O(NlogN),空间复杂度为O(N)。
| 测试用例 | 说明 | 结果 | |:--------:|:----:|:----:| | n = 1 | 第1个纯数为1 | 1 | | n = 10 | 第10个纯数为12 | 12 | | n = 20 | 第20个纯数为36 | 36 | | n = 1000 | 第1000个纯数为5120000 | 5120000 |