ugly Number实际上就是质因子仅有给定素数构成。实际上我们不妨从1开始记录这个ugly number的列表....实际上新的ugly number是由旧的ugly number和各个素数的乘积中的最小值....我们不妨利用另一个数组记录各个素数已经考虑的情况即可
public class Solution {
public int nthSuperUglyNumber(int n, int[] primes) {
int k=primes.length;
int[] primeCount=new int[k];
int[] uglyNumberList=new int[n];
uglyNumberList[0]=1;
if( n==1 )
{
return 1;
}
int curNum=Integer.MAX_VALUE;
for( int i=2;i<=n;i++ )
{
curNum=Integer.MAX_VALUE;
for( int j=0;j<k;j++ )
{
if( uglyNumberList[primeCount[j]]*primes[j]<curNum )
{
curNum=uglyNumberList[primeCount[j]]*primes[j];
}
}
uglyNumberList[i-1]=curNum;
for( int j=0;j<k;j++ )
{
if( uglyNumberList[primeCount[j]]*primes[j]==curNum )
{
primeCount[j]++;
}
}
}
return curNum;
}
}