分析
难度 中
来源 https://leetcode.com/problems/super-ugly-number/
题目
Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.
Example:
Input: n = 12, primes = [2,7,13,19]
Output: 32
Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12
super ugly numbers given primes = [2,7,13,19] of size 4.
Note:
• 1 is a super ugly number for any given primes.
• The given numbers in primes are in ascending order.
• 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
• The nth super ugly number is guaranteed to fit in a 32-bit signed integer.
解答
package LeetCode;
public class L313_SuperUglyNumber {
public int nthSuperUglyNumber(int n, int[] primes) {//参照264题解法
int[] uglyNums=new int[n];
int primeLen=primes.length;
int[] indexs=new int[primeLen];
int[] temps=new int[primeLen];
for(int i=0;i<primeLen;i++){
indexs[i]=0;
temps[i]=primes[i];
}
uglyNums[0]=1;
for(int i=1;i<n;i++)
uglyNums[i]=Integer.MAX_VALUE;
int last;
for(int i=1;i<n;i++){
last=uglyNums[i-1];
for(int j=0;j<primeLen;j++){
if(last==temps[j])
temps[j]=primes[j]*uglyNums[++indexs[j]];
if(uglyNums[i]>temps[j])
uglyNums[i]=temps[j];
}
}
return uglyNums[n-1];
}
public static void main(String[] args){
L313_SuperUglyNumber l313=new L313_SuperUglyNumber();
int n=12;
int[] primes={2,7,13,19};
System.out.println(l313.nthSuperUglyNumber(n,primes));
}
}