1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] dp = new int[n]; dp[0] = 1;
int[] points = new int[primes.length]; for (int i = 1; i < dp.length; i++) { int min = Integer.MAX_VALUE; for (int j = 0; j < primes.length; j++) { if (dp[points[j]] <= Integer.MAX_VALUE / primes[j]) { min = Math.min(min, dp[points[j]] * primes[j]); } } for (int j = 0; j < points.length; j++) { if (dp[points[j]] <= Integer.MAX_VALUE / primes[j]) { if (min == dp[points[j]] * primes[j]) { points[j]++; } } } dp[i] = min; }
return dp[n - 1]; } }
|