返回
LeetCode题解:264. 丑数 II,暴力法,JavaScript,详细注释
前端
2023-12-30 11:16:36
题解:264. 丑数 II
对于LeetCode题解:264. 丑数 II ,我们暴力法 ,用JavaScript编写了解答方案。
首先我们来看一道经典的面试题:
什么是丑数?
丑数是指只能被2、3、5整除 的正整数。
例如:
- 1 是丑数,因为 1 = 1。
- 2 是丑数,因为 2 = 2。
- 3 是丑数,因为 3 = 3。
- 4 不是丑数,因为 4 = 2^2。
- 5 是丑数,因为 5 = 5。
求解丑数二的暴力方法
我们知道丑数只能被2、3、5整除。因此我们可以通过三层循环,不断地将2、3、5相乘,得到新的丑数。
然后将所有丑数从小到大排序,再取出第n个即可。
算法步骤:
- 定义变量i、j、k,分别存储2、3、5的倍数。
- 定义数组uglyNums存储所有丑数。
- 初始化丑数数组uglyNums,将1放入其中。
- 循环,直至uglyNums数组中的丑数数量达到n。
- 在每一步中,比较i、j、k的值,将最小的一个放入uglyNums数组中。
- 然后,将对应倍数的变量加1。
- 重复步骤5和步骤6,直到uglyNums数组中的丑数数量达到n。
复杂度分析
- 时间复杂度:O(n log n)。
- 空间复杂度:O(n)。
代码实现
/**
* 返回第n个丑数
* @param {number} n
* @return {number}
*/
const nthUglyNumber = (n) => {
if (n <= 0) {
return 0;
}
// 定义变量i、j、k,分别存储2、3、5的倍数。
let i = 0;
let j = 0;
let k = 0;
// 定义数组uglyNums存储所有丑数。
const uglyNums = [1];
// 循环,直至uglyNums数组中的丑数数量达到n。
while (uglyNums.length < n) {
// 在每一步中,比较i、j、k的值,将最小的一个放入uglyNums数组中。
const nextUglyNumber = Math.min(uglyNums[i] * 2, uglyNums[j] * 3, uglyNums[k] * 5);
uglyNums.push(nextUglyNumber);
// 然后,将对应倍数的变量加1。
if (nextUglyNumber === uglyNums[i] * 2) {
i++;
} else if (nextUglyNumber === uglyNums[j] * 3) {
j++;
} else {
k++;
}
}
// 返回第n个丑数。
return uglyNums[n - 1];
};
完整代码:
丑数 II
丑数是指只能被2、3、5整除的正整数。求解丑数 II 的暴力方法是使用三个嵌套循环,计算出所有可能的丑数。由于每层循环都是在上层循环的结果基础上进行计算,因此计算结果并未排序。将所有丑数从小到大排序,再取出第n个即可。
算法步骤
- 定义变量i、j、k,分别存储2、3、5的倍数。
- 定义数组uglyNums存储所有丑数。
- 初始化丑数数组uglyNums,将1放入其中。
- 循环,直至uglyNums数组中的丑数数量达到n。
- 在每一步中,比较i、j、k的值,将最小的一个放入uglyNums数组中。
- 然后,将对应倍数的变量加1。
- 重复步骤5和步骤6,直到uglyNums数组中的丑数数量达到n。
代码实现
/**
* 返回第n个丑数
* @param {number} n
* @return {number}
*/
const nthUglyNumber = (n) => {
if (n <= 0) {
return 0;
}
// 定义变量i、j、k,分别存储2、3、5的倍数。
let i = 0;
let j = 0;
let k = 0;
// 定义数组uglyNums存储所有丑数。
const uglyNums = [1];
// 循环,直至uglyNums数组中的丑数数量达到n。
while (uglyNums.length < n) {
// 在每一步中,比较i、j、k的值,将最小的一个放入uglyNums数组中。
const nextUglyNumber = Math.min(uglyNums[i] * 2, uglyNums[j] * 3, uglyNums[k] * 5);
uglyNums.push(nextUglyNumber);
// 然后,将对应倍数的变量加1。
if (nextUglyNumber === uglyNums[i] * 2) {
i++;
} else if (nextUglyNumber === uglyNums[j] * 3) {
j++;
} else {
k++;
}
}
// 返回第n个丑数。
return uglyNums[n - 1];
};
复杂度分析
- 时间复杂度:O(n log n)。
- 空间复杂度:O(n)。
结语
以上就是LeetCode题解:264. 丑数 II 的暴力法解法,希望对您有所帮助。如果您有其他问题,请随时留言。

扫码关注微信公众号
无缝体验,一键刷新:AJAX 异步局部更新引领前端技术革命

从小白到专家:浏览器事件循环深度剖析

#SpringBoot+JQuery-ajax实现文件上传#title# <#keyword>SpringBoot, JQuery-ajax, 文件上传, 文件下载, web开发, restful api</#keyword> <#description>本文介绍如何使用SpringBoot和JQuery-ajax来实现文件上传功能,包括前端页面、SpringBoot服务端代码和JQuery-ajax代码。步骤详细,示例代码齐全,可直接上手操作。</#description> ## 前端页面 前端页面是一个简单的HTML页面,包含一个文件输入框和一个提交按钮。 ```html <!DOCTYPE html> <html> <head> 文件上传

Vite、TypeScript、React:构建高效前端应用的三剑客

Axios 从入门到精通,只需10分钟
