313.超級醜數
阿新 • • 發佈:2018-12-19
編寫一段程式來查詢第 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
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(); } };