超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。
这道题跟丑数II的基本思路是一致的,这道题是在其基础上做了升级。丑数II中primes是固定的2, 3, 5,这道题的primes是动态变化的。
还是指针的思路,只不过这里的指针数量取决于primes的长度。
代码如下:
function nthSuperUglyNumber(n: number, primes: number[]): number {
const res = [1]
const primesLen = primes.length
const rates = new Array(primesLen).fill(0)
const values: number[] = []
while(res.length !== n) {
for(let i = 0; i < primesLen; ++i) {
values[i] = res[rates[i]] * primes[i]
}
let min = Math.min.apply(null, values)
res.push(min)
for(let i = 0; i < primesLen; ++i) {
if (values[i] === min) {
rates[i]++
}
}
}
return res[res.length - 1]
};
第一次双100,纪念一下。