难度:中等。
标签:数组,哈希表,数学,动态规划,堆(优先队列)。
跟剑指 Offer 49. 丑数一样的做法,但是我已经完全忘了这个题咋做的了。
看了下剑指那题的解法,然后写出了该题的解法。
正确解法:
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
if(n == 1)return 1;
vector<int> dp(n);
dp[0] = 1;
int m = primes.size();
vector<int> index(m, 0);
for(int i = 1; i < n; ++i){
vector<int> nums(m);
int now = -1;
for(int j = 0; j < m; ++j){
nums[j] = primes[j] * dp[index[j]];
if(now == -1)now = nums[j];
else now = min(nums[j], now);
}
dp[i] = now;
for(int j = 0; j < m; ++j){
if(nums[j] == dp[i]){
index[j]++;
}
}
}
return dp[n - 1];
}
};
结果: