📜  找出第N个纯数(1)

📅  最后修改于: 2023-12-03 14:54:35.114000             🧑  作者: Mango

找出第N个纯数

纯数是指只有质因子2、3、5的正整数。找出第N个纯数的算法十分简单,可以利用优先队列(堆)的特性进行解决。

算法思路
  1. 初始化一个队列,将初始的纯数1加入队列;
  2. 从队列中取出最小的数num,然后将num2、num3、num*5分别加入队列;
  3. 重复第2步,直到队列中的第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 |