前言
明天国庆加中秋,上了一天课,苦逼回到实验室继续学习,导师还拿了一百多份本科作业让我评改,难受。
题目
题解源码
这题和昨天的丑数2是一样的方法,只不过昨天只有三个数,今天数不确定,采用了多指针和冬天规划的方法。可参考丑数2博客
Java源码
class Solution {
public int nthSuperUglyNumber(int n, int[] primes) {
int[] dp=new int[n];
dp[0]=1;
int k = primes.length;
int [] index=new int[k];
for (int i=1;i<n;++i){
int min =Integer.MAX_VALUE;
for(int j=0;j<k;++j){
if (min>dp[index[j]]*primes[j]){
min=dp[index[j]]*primes[j];
}
}
dp[i]=min;
for(int j=0;j < k; ++j){
if (min==dp[index[j]]*primes[j]){
index[j]++;
}
}
}
return dp[n-1];
}
}
python
class Solution:
def nthSuperUglyNumber(self, n: int, primes: List[int]) -> int:
dp=[1,]
k=len(primes)
index=[0]*k
for i in range(1,n):
minValue=float('inf')
for j in range(k):
if minValue>dp[index[j]]*primes[j]:
minValue=dp[index[j]]*primes[j]
dp.append(minValue)
for j in range(k):
if minValue==dp[index[j]]*primes[j]:
index[j]+=1
return dp[n-1]