[leetcode] 313. Super Ugly Number

    xiaoxiao2025-06-14  17

    Write a program to find the nth super ugly number.

    Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4.

    Note: (1) 1 is a super ugly number for any given primes. (2) The given numbers in primes are in ascending order. (3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.

    解法一:

    完全思路,看的大神的解法。维护一个数组idx,保存当前的元素下一次应该与res里的哪一个元素相乘。如果是最小的元素,则更新idx。

    class Solution { public: int nthSuperUglyNumber(int n, vector<int>& primes) { vector<int> res(1,1), idx(primes.size(),0); while(res.size()<n){ vector<int> tmp; int mn = INT_MAX; for(int i=0; i<primes.size();i++) tmp.push_back(res[idx[i]]*primes[i]); for(int i=0; i<primes.size();i++) mn = min(mn,tmp[i]); for(int i=0; i<primes.size();i++){ if(tmp[i]==mn) ++idx[i]; } res.push_back(mn); } return res.back(); } };

    转载请注明原文地址: https://ju.6miu.com/read-1299952.html
    最新回复(0)