返回
如何用 JavaScript 轻松征服 LeetCode 264:丑数 II?三指针算法,详细注释!
前端
2023-12-11 05:55:45
如何轻松征服 LeetCode 264:丑数 II 的三指针算法(附 JavaScript 代码和详细注释)
欢迎来到 LeetCode 264 的攻略之旅,一个旨在揭开“丑数 II”之谜的算法挑战!本指南将深入剖析三指针算法,并通过 JavaScript 代码和详细注释,让你轻松驾驭这道难题。
何为“丑数”?
“丑数”是指仅包含质因子 2、3 和 5 的正整数。例如,1、2、3、4、5、6、8、9、10、12 等都是丑数。
三指针算法简介
三指针算法的精髓在于巧妙利用“丑数”的生成规律。具体来说,我们可以维护三个指针,分别指向当前序列中的乘数 2、3 和 5 的位置。然后,我们不断选择这三个乘数中最小的一个作为下一个丑数,并更新相应的指针位置。
JavaScript 代码
const nthUglyNumber = (n) => {
// 丑数数组
const ugly = [1];
// 三个指针
let i2 = 0;
let i3 = 0;
let i5 = 0;
while (ugly.length < n) {
// 获取当前乘数的最小值
const min = Math.min(ugly[i2] * 2, ugly[i3] * 3, ugly[i5] * 5);
// 添加最小值到丑数数组
ugly.push(min);
// 更新指针位置
if (min === ugly[i2] * 2) i2++;
if (min === ugly[i3] * 3) i3++;
if (min === ugly[i5] * 5) i5++;
}
// 返回第 n 个丑数
return ugly[n - 1];
};
详细注释
- line 2: 初始化丑数数组
ugly
。 - line 4-6: 初始化三个指针
i2
、i3
和i5
。 - line 8-13: 循环生成丑数,直到数组长度达到
n
。 - line 10: 获取当前乘数的最小值
min
。 - line 12: 将
min
添加到ugly
数组。 - line 14-19: 更新指针位置,使乘数与最小值保持同步。
使用示例
console.log(nthUglyNumber(10)); // 输出:12
console.log(nthUglyNumber(1)); // 输出:1
console.log(nthUglyNumber(1500)); // 输出:859963392
总结
三指针算法为 LeetCode 264 提供了一种简单高效的解决方案。通过利用丑数的生成规律,我们能够快速生成第 n 个丑数。通过这份详细的指南和 JavaScript 代码,你也可以轻松征服这道算法挑战!