超级丑数

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。
给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。
题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。

  • 输入: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] 。

  • 输入:n = 1, primes = [2,3,5]

  • 输出:1

  • 解释:1 不含质因数,因此它的所有质因数都在质数数组 primes = [2,3,5] 中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var nthSuperUglyNumber = function(n, primes) {
const len = primes.length;
let order = [1]; // 第一个丑数是 1
let base = new Array(len).fill(0);

while (order.length < n) {
let min = Infinity;
let minIndex;
for (let i = 0; i < len; i++) {
const val = primes[i] * order[base[i]]
if (val < min) {
min = val;
minIndex = i;
}
}
if (order[order.length-1] !== min) {
order.push(min);
}
base[minIndex]++;
}

return order[order.length-1];
};