Super Ugly Number

MediumArrayMathDynamic Programming

Solution

export function nthSuperUglyNumber(n: number, primes: number[]): number {
  const m = primes.length;
  const dp = new Array(n).fill(Number.MAX_SAFE_INTEGER);
  const indices = new Array(m).fill(0);
  dp[0] = 1;
 
  for (let i = 1; i < n; i++) {
    for (let j = 0; j < m; j++) {
      dp[i] = Math.min(dp[i], primes[j] * dp[indices[j]]);
    }
    for (let j = 0; j < m; j++) {
      if (dp[i] === primes[j] * dp[indices[j]]) {
        indices[j] += 1;
      }
    }
  }
  return dp[n - 1];
}