算法题解-丑数

127 阅读2分钟

题目

丑数 就是只包含质因数 23 和 5 的正整数。

输入: n = 6
输出: true

题解

第一种

我们在函数接受一个参数n,n参数表示我们要判断的数,接下来我们进行判断如果n小于等于0,如果满足条件我们则直接返回false,接下来我们声明一个变量number,该变量的值为2乘以3乘以5,该值是2、3、5的最小公倍数,然后我们使用循环,我们先检查n是否能被number整除,如果能我们则除以number,因为number包含了所有的2、3、5因数,所以除以number后n中就不再包含2、3、5因数了,然后我们将number的值改为2乘以3的值,然后我们在使用循环判断当前n参数是否除以number是否等于0,如果等于0我们则把number变量改为2乘以5以及3乘以5这些值,最后我们判断n是否等于1,如果等于1,说明n只包含2、3、5这三个质因数,我们则返回true否则我们则返回false即可

var isUgly = function(n) {
    if(n <= 0) return false;
    let number = 2 * 3 * 5;
    while(n % number === 0) n /= number;
    number = 2 * 3;
    while(n % number === 0) n /= number;
    number = 2 * 5;
    while(n % number === 0) n /= number;
    number = 3 * 5;
    while(n % number === 0) n /= number;
    while(n % 2 === 0) n /= 2;
    while(n % 3 === 0) n /= 3;
    while(n % 5 === 0) n /= 5;
    return n === 1;
};

第二种

在函数中我们接受一个参数n,我们首先声明了两个变量p和num,p表示是否继续进行循环,num表示当前需要判断的数,设定初始值为n,然后考虑n等于1、0、-1的几种情况,如果等于1我们则直接返回true,如果等于0或-1我们则返回false,接下来我们使用while循环,进行判断num是否能够被2、3、5整除,如果能被2整除我们则将num除以2,如果能被3整除我们则将num除以3,如果能被5整除我们则将num除以5,如果num不能被2、3、5整除,则说明num不是丑数,我们就将p设为false,跳出循环即可,最后我们判断当前num是否等于1,如果等于1则说明n只包含2、3、5这三个质因数我们则返回true否则返回false即可

var isUgly = function(n) {
    let p = true,
        num = n;
    if(n === 1){ return true}
    if(n === 0 ||n === -1){return false}
    while(p){
        if(num%2 === 0){
            num = num/2;
        }else if(num%3 === 0){
            num = num/3
        }else if(num%5 === 0){
            num = num/5
        }else{
            p = false;
        }
    }
    if(num === 1){
        return true;
    }else{
        return false;
    }
};

坚持努力,无惧未来!