一日一练:超级丑数

106 阅读1分钟

超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。

这道题跟丑数II的基本思路是一致的,这道题是在其基础上做了升级。丑数IIprimes是固定的2, 3, 5,这道题的primes是动态变化的。

还是指针的思路,只不过这里的指针数量取决于primes的长度。

代码如下:

function nthSuperUglyNumber(n: number, primes: number[]): number {
  const res = [1]
  const primesLen = primes.length
  const rates = new Array(primesLen).fill(0)
  const values: number[] = []
  while(res.length !== n) {
    for(let i = 0; i < primesLen; ++i) {
      values[i] = res[rates[i]] * primes[i]
    } 
    let min = Math.min.apply(null, values)
    res.push(min)
    for(let i = 0; i < primesLen; ++i) {
      if (values[i] === min) {
        rates[i]++
      }
    }
  }
  return res[res.length - 1]
};

第一次双100,纪念一下。

image.png