js - leetcode-丑数

234 阅读2分钟

这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

前言

  • 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来,由此可见,leetcode的题还是有分量的。今天我们就来会会它们

题目地址

丑数

题目介绍

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

 

示例 1:

输入:n = 6
输出:true
解释:6 = 2 × 3

示例 2:

输入:n = 8
输出:true
解释:8 = 2 × 2 × 2

示例 3:

输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。

示例 4:

输入:n = 1
输出:true
解释:1 通常被视为丑数。

提示:

-231 <= n <= 231 - 1

数学

思路

根据丑数的定义,00 和负整数一定不是丑数。

当 n>0n>0 时,若 nn 是丑数,则 nn 可以写成 n = 2^a * 3^b * 5^cn=2 a ×3 b ×5 c 的形式,其中 a,b,c 都是非负整数。特别地,当 a,b,c 都是 0 时,n=1。

为判断 n 是否满足上述形式,可以对 n 反复除以 2,3,5,直到 nn 不再包含质因数 2,3,5。若剩下的数等于 1,则说明 n 不包含其他质因数,是丑数;否则,说明 n 包含其他质因数,不是丑数。

解法一

/**
 * @param {number} n
 * @return {boolean}
 */
var isUgly = function(n) {
    //  如果n小于等于0 返回false
    if (n <= 0) {
        return false;
    }
    // 丑数 会包含 2、3、5
    const factors = [2, 3, 5];
    // 循环遍历
    for (const factor of factors) {
    // 判断 取余是否为0,为0的话,执行/= 进行下一步操作
        while (n % factor === 0) {
            n /= factor;
        }
    }
    return n == 1;
};

解法二

/**
 * @param {number} n
 * @return {boolean}
 */
var isUgly = function (n) {
    if (n <= 0) {
        return false;
    }
    const list = [2, 3, 5]
    for (let i = 0; i < list.length; i++) {
        while(n%list[i]===0) {
            n/=list[i]
        }
    }
    return n === 1
};

写在最后

  • 希望你能收获满满