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;
}
}
本文介绍了一种高效算法用于寻找第n个超级丑数。超级丑数定义为仅包含特定质因数的正整数。算法通过维护一个动态更新的数组来跟踪每个质因数对应的丑数,并通过迭代计算出目标超级丑数。
1563

被折叠的 条评论
为什么被折叠?



