1. 程式人生 > >313.超級醜數

313.超級醜數

編寫一段程式來查詢第 n 個超級醜數。

超級醜數是指其所有質因數都是長度為 k 的質數列表 primes 中的正整數。

示例:

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

說明:

  • 1 是任何給定 primes 的超級醜數。
  •  給定 primes 中的數字以升序排列。
  • 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
  • 第 n
     個超級醜數確保在 32 位有符整數範圍內。

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 (mn == tmp[i]) ++idx[i];             }             res.push_back(mn);         }         return res.back();     } };