首先把1放入最小堆,然后把primes中的所有数字都乘以该最小堆中的堆顶值,并把其中小于32位有符整数放入堆中,由于最小堆的性质,只会把最小值放在堆顶,因此每次弹出堆顶值,操作n遍即可。
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
priority_queue<int,vector<int>,greater<int>>nums;
nums.push(1);
int count=0;
int temp=0;
while(count<n){
count++;
temp=nums.top();
nums.pop();
while(nums.size()>0 && nums.top()==temp){
nums.pop();
}
for(long long i : primes){
long long num=i*temp;
if(num<=INT32_MAX){
nums.push(num);
}
}
}
return temp;
}
};