[路飞]_leetcode_313. 超级丑数

92 阅读1分钟

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 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]
};