[路飞]_LeetCode_313. 超级丑数

89 阅读1分钟

题目

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。

给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。

题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。

示例 1:

输入:n = 12, primes = [2,7,13,19]
输出:32 
解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:
[1,2,4,7,8,13,14,16,19,26,28,32]

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

解题思路

前面我们有介绍过动态规划求解丑数,[路飞]_LeetCode_264. 丑数 II,这道题的区别在于质因数是通过参数动态给出的。所以我们在通过质因数计算数字的时候也要是动态的,具体实现请看代码部分。

代码实现

var nthSuperUglyNumber = function (n, primes) {
  const dp = [0];
  const len = primes.length
  const p = new Array(len).fill(0)
  const nums = new Array(len).fill(1)

  for (let i = 1; i <= n; i++) {
    //取下一组数字中最小的数
    dp[i] = Math.min(...nums)

    //更新下一组数字
    for (let j = 0; j < len; j++) {
      if (dp[i] === nums[j]) {
        p[j]++
        nums[j] = dp[p[j]] * primes[j]
      }
    }
  }

  return dp[n]
};

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