313 - Super Ugly Number
Written on December 4, 2015
Tweet
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. For example, [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.
public class Solution {
public static int nthSuperUglyNumber(int n, int[] primes) {
int[] indexes = new int[primes.length];
int[] result = new int[n];
result[0] = 1;
for (int i = 1; i < n; i++) {
result[i] = Integer.MAX_VALUE;
for (int j = 0; j < indexes.length; j++) {
result[i] = Math.min(result[i], result[indexes[j]] * primes[j]);
}
for (int j = 0; j < indexes.length; j++) {
if (result[i] == result[indexes[j]] * primes[j]) {
indexes[j]++;
}
}
}
return result[n-1];
}
}
class Solution(object):
def nthSuperUglyNumber(self, n, primes):
"""
:type n: int
:type primes: List[int]
:rtype: int
"""
primes_index = [0] * len(primes)
num = [0] * n
num[0] = 1
for i in xrange(1, n):
num[i] = min([num[primes_index[j]] * primes[j] for j in xrange(len(primes))])
for k in xrange(len(primes)):
if num[i] == num[primes_index[k]] * primes[k]:
primes_index[k] += 1
return num[-1]