超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。
给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。
题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。
解题思路
这一题和丑数 II类似,只是把质因数改成随机的。所以我们需要一个数组来维护每个指针的当前位置。
代码
var nthSuperUglyNumber = function(n, primes) {
let res = [1];
// 记录每个指针的位置
let points = new Array(primes.length).fill(0)
let map, min
for (let i = 1; i <= n; i++) {
map = primes.map((prime, index) => res[points[index]] * prime)
// 取最小值
min = Math.min.apply(null, map)
// 判断质因数
primes.forEach((prime, index) => {
// map[index] === res[points[index]] * prime
if (map[index] == min) points[index]++
})
res.push(min)
}
return res[n - 1]
};