313. 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 givenprimes
=[2,7,13,19]
of size 4.
Note:
1
is a super ugly number for any givenprimes
.- 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.
和ugly number ii很像,解觉得方法就是设置两个数组,一个存数,一个存factors的index
所谓index,就是指下一个factor应该与结果数组里那个数相乘的index
class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] res = new int[n]; res[0] = 1; int[] ind = new int[primes.length]; for(int j = 1; j < n; j++){ res[j] = Integer.MAX_VALUE; for(int i = 0; i < primes.length; i++){ res[j] = Math.min(res[j], primes[i] * res[ind[i]]); } for(int i = 0; i < primes.length; i++){ if(res[j] == primes[i] * res[ind[i]]) ind[i]++; } } return res[n-1]; } }
每个数的运算都是先把当前最小的找出来,然后如果是哪个factor得来的,就把那个factor的index++
Keep track the index, use the minimum one.