js(71)~[313] 超级丑数

101 阅读1分钟

本题力扣传送门

这个题我首先想到的,是上一题(70)写的,小顶堆的方法,直接替换哪个factor的数组为primes,但是提交的时候报错,所以只好看解析,怎么用三指针实现.代码如下

/*
 * @lc app=leetcode.cn id=313 lang=javascript
 *
 * 
 */

// @lc code=start
/**
 * @param {number} n
 * @param {number[]} primes
 * @return {number}
 */
var nthSuperUglyNumber = function (n, primes) {
	let p = new Array(primes.length).fill(0);
	let ans = 1;
	let data = [1];
	while (data.length < n) {
		ans = data[p[0]] * primes[0];
		//// 内层循环1:计算当前 指针指向的丑数*指针对应的质因子
		for (let i = 0; i < primes.length; i++) {
			ans = Math.min(ans, primes[i] * data[p[i]])
		}
		 // 内层循环2:找到选出的res[i]对应的指针,把指针往前移
		for (let i = 0; i < primes.length; i++) {
			if (ans === primes[i] * data[p[i]]) {
				p[i]++
			}
		}

		data.push(ans)
	}
	return ans;
};
// @lc code=end