列表

详情


264. 丑数 II

给你一个整数 n ,请你找出并返回第 n丑数

丑数 就是只包含质因数 23 和/或 5 的正整数。

 

示例 1:

输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。

示例 2:

输入:n = 1
输出:1
解释:1 通常被视为丑数。

 

提示:

相似题目

合并K个升序链表

计数质数

丑数

完全平方数

超级丑数

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int nthUglyNumber(int n) { } };

python3 解法, 执行用时: 112 ms, 内存消耗: 15 MB, 提交时间: 2022-08-10 16:40:56

class Solution:
    def nthUglyNumber(self, n: int) -> int:
        # 动态规划
        dp = [0] * (n + 1)
        dp[1] = 1
        p2 = p3 = p5 = 1

        for i in range(2, n + 1):
            num2, num3, num5 = dp[p2] * 2, dp[p3] * 3, dp[p5] * 5
            dp[i] = min(num2, num3, num5)
            if dp[i] == num2:
                p2 += 1
            if dp[i] == num3:
                p3 += 1
            if dp[i] == num5:
                p5 += 1
        
        return dp[n]

python3 解法, 执行用时: 152 ms, 内存消耗: 15.2 MB, 提交时间: 2022-08-10 16:40:27

class Solution:
    def nthUglyNumber(self, n: int) -> int:
        # 最小堆
        factors = [2, 3, 5]
        seen = {1}
        heap = [1]

        for i in range(n - 1):
            curr = heapq.heappop(heap)
            for factor in factors:
                if (nxt := curr * factor) not in seen:
                    seen.add(nxt)
                    heapq.heappush(heap, nxt)

        return heapq.heappop(heap)

上一题