leetcode 313. 超级丑数

104 阅读1分钟

c++

class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        vector<int> list{1}, print(primes.size());
        int ans = 1;
        while (--n) {
            ans = primes[0] * list[print[0]];
            for (int i = 1; i < primes.size(); i++) {
                ans = min(ans, primes[i] * list[print[i]]);
            }
            for (int i = 0; i < primes.size(); i++) {
                if (ans == primes[i] * list[print[i]]) {
                    print[i]++;
                }
            }            
            list.push_back(ans);
        }
        return ans;
    }
};

js

var nthSuperUglyNumber = function(n, primes) {
    var list = [1], p = new Array(primes.length).fill(0), ans = 1;
    while (--n) {
        ans = primes[0] * list[p[0]];
        for (var i = 1; i < primes.length; i++) {
            ans = Math.min(ans, primes[i] * list[p[i]]);
        }
        for (var i = 0; i < primes.length; i++) {
            if (ans == primes[i] * list[p[i]]) p[i]++;
        }
        list.push(ans);
    }
    return ans;
};