1.n个指针
设primes.size()=n,则设置n个指针,初始为0,分别指向结果数组中有资格与primes[0]--primes[n-1]相乘的元素的下标,取最小值,且最小值对应的指针的值加1,
代码如下:
class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
//即该元素的质因数为primes中的一个
//和丑数一样,不同之处在于设置了primes.size()个指针
vector<int> res(n);
res[0]=1;
int len=primes.size();
vector<int> p(len,0);//设置len个指针
for(int i=1;i<n;i++)
{
int imin=INT_MAX;
for(int j=0;j<len;j++)
if(primes[j]*res[p[j]]<imin)
imin=primes[j]*res[p[j]];
res[i]=imin;
for(int j=0;j<len;j++)
if(primes[j]*res[p[j]]==imin)
p[j]++;
}
return res[n-1];
}
};
2.堆