其实这个题我之前做过,现在又忘记了。记忆力不好啊。
下一个ugly数都是由之前的ugly数乘以素数得到的。所以每次得到下一个ugly的时间复杂度都是现行的。不过可以做一个堆。这样得到下一个数的时间复杂度会达到lgN
public class Solution {
public int nthSuperUglyNumber(int n, int[] primes) {
int index[]=new int[primes.length];
int result[]=new int[n];
result[0]=1;
for(int i=1;i<n;i++)
{
int les=Integer.MAX_VALUE;
for(int j=0;j<primes.length;j++)
{
les=Math.min(les, result[index[j]]*primes[j]);
}
for(int j=0;j<primes.length;j++)
{
if(les==result[index[j]]*primes[j])
{
result[i]=les;
index[j]++;
}
}
}
return result[n-1];
}
}