题目
超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 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]
};
如有错误欢迎指出,欢迎一起讨论!