解法一
思想其实和丑数是一样的,参见:剑指 Offer 49. 丑数
class Solution {
public int nthSuperUglyNumber(int n, int[] primes) {
final int len = primes.length;
// dp[i]表示第i+1个丑数
int[] dp = new int[n];
dp[0] = 1;
int[] pointer = new int[len];
int[] num = new int[len];
for (int i = 0; i < len; ++i) {
num[i] = dp[pointer[i]] * primes[i];
}
for (int i = 1; i < n; ++i) {
dp[i] = min(num);
for (int j = 0; j < len; ++j) {
if (num[j] == dp[i]) {
++pointer[j];
num[j] = dp[pointer[j]] * primes[j];
}
}
}
return dp[n - 1];
}
private int min(int[] arr) {
int min = Integer.MAX_VALUE;
for (int i : arr) {
if (i < min) {
min = i;
}
}
return min;
}
}