[路飞]_LeetCode_264. 丑数 II

140 阅读1分钟

题目

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

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

示例 1:

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

来源:力扣(LeetCode)leetcode-cn.com/problems/ug…

解题思路

  1. 递推公式:dp[i] = Math.min(dp[p2] * 2, dp[p3] * 3, dp[p5] * 5)
  2. 初始状态:dp = [0, 1]

代码实现

var nthUglyNumber = function(n) {
    let p2 = p3 = p5 = 1
    const dp = [0, 1]

    for (let i = 2; i <= n; i++) {
        dp[i] = Math.min(dp[p2] * 2, dp[p3] * 3, dp[p5] * 5)

        if (dp[i] === dp[p2] * 2) p2++
        if (dp[i] === dp[p3] * 3) p3++
        if (dp[i] === dp[p5] * 5) p5++
    }

    return dp[n]
};

如有错误欢迎指出,欢迎一起讨论!