「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」
264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
「示例1:」
输入:n = 10
输出:12
解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
「示例2:」
输入:n = 1
输出:1
解释:1 通常被视为丑数。
「示例3:」
输入:n = 4
输出:4
解释:[1, 2, 3, 4] 通常被视为丑数。
「提示: 」
1. 1 <= n <= 1690
解题思路
1. 由题目可以得出丑数 就是只包含质因数 `2`、`3` 和/或 `5` 的正整数
2. 同时因为丑书的第一个数默认是`1`,所以我们需要生成一个默认的丑数数组,默认值第一个值是1
3. 我们可以生成三个指针为0的数,并且生成三个初始值为0的数,然后用2、3、5分别乘以然后取出最小值
4. 然后循环n次,生成一个n个数组成的丑书数组
5.返回数组的第n-1个值即可
代码实现
/**
* 264. 丑数 II
* @param {number} n
* @return {number}
*/
var nthUglyNumber = function (n) {
let arr = [1]; // 丑书数组,默认值第一个丑书为1
let cur2 = 0,
cur3 = 0,
cur5 = 0; // 2 3 5每个值的指针
let num2 = 0,
num3 = 0,
num5 = 0; // 2 3 5每个值的初始值
for (let i = 1; i < n; i++) { // 循环n次生成n个丑书数组
num2 = arr[cur2] * 2; // 获取乘以2的值
num3 = arr[cur3] * 3; // 获取乘以3的值
num5 = arr[cur5] * 5; // 获取乘以4的值
let min = Math.min(num2, num3, num5); // 取出最小值
arr.push(min); // 最小值放入数组
if (min == num2) cur2++; //如果获取该数字下的最小值 它的指针 + 1
if (min == num3) cur3++; //如果获取该数字下的最小值 它的指针 + 1
if (min == num5) cur5++; //如果获取该数字下的最小值 它的指针 + 1
}
// console.log(arr);
return arr[n - 1]; // 最后返回数组的第n - 1个值即可
};
如果你对这道题目还有疑问的话,可以在评论区进行留言;