壹 ❀ 引

本题来自LeetCode263. 丑数,难度简单,题目描述如下:

给你一个整数 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

在简单分析题目后,你会发现这题确实挺简单,那么我们开始。

贰 ❀ 简单的分析与实现

根据题意,所谓丑数,是只包含质因数2,3,5的数字,说通俗点就是如果一个数能被这些数整除,那么这个数字就是一个丑数。我们来几个例子:

let n = 8;
8/2 = 4;
4/2 = 2;
2/2= 1;
// 因此8是一个丑数 let n = 15;
15/5 = 3;
3/3 = 1;
// 15是一个丑数 let n = 14;
14/2 = 7;
// 7再除以2,3,5都无法整除,因此不是一个丑数

根据上面3个例子,我们会发现一个丑数可能被一个质因数直接整除完,它也可能需要依赖多个质因数才能整除完,那么有同学可能就要问了,那我拿到一个数字,我怎么知道它应该先除以几呢?其实跟先除以谁没关系,请再看15的例子:

let n = 15;
15/5 = 3;
3/3 = 1; 15/3 = 5;
5/5 = 1;

只要这个数字能被这几个质因数整除,那么它的顺序其实是无关,记住,前提是它能被整除。

综合上面分析,我们总结下结论,一个数字可能被某个质因数直接整除完(比如8,9这种,最终等于1),一个数字可能需要依赖多个质因数才能整除完(比如15这种),那不就简单了,如果它能被一个质因数整除,那就循环让它一直除以这个质因数,如果不能整除了,我们就换下个质因数试试,如果三个质因数都无法整除了,我们看最终结果是否等于1,等于1自然是丑数,反之不是。

那么怎么看一个数能否被一个质因数整除呢?当然是利用取余,比如:

8%2//0
9%3//0 // 第一次能整除
15%3//0
// 我们就除以3,继续看5能不能被3整除
15/3 = 5
// 结果5不能被3整除了,那就试试其它质因数吧
5%3 !== 0;
// 哎,它可以被5整除,那就除以5
5%5//0
5/5 = 1
//1不能被2 3 5整除了,都不满足条件了,最终结果等于1,所以是丑数

上述就是程序的执行过程,让我们来实现它:

/**
* @param {number} n
* @return {boolean}
*/
var isUgly = function (n) {
// 注意,如果小于等于0肯定不是丑数
if(n <= 0){
return false;
}
// 能不能被2一直整除下去?能就一直除
while (n % 2 === 0) {
n = n / 2;
}
// 不能整除2了来试试3和5,前面解释了先除以谁先后顺序没关系
while (n % 3 === 0) {
n = n / 3;
}
while (n % 5 === 0) {
n = n / 5;
}
return n === 1;
};

OK,一道简单的丑数题就写到这里了。

JS Leetcode 263. 丑数 题解分析,来认识有趣的丑数吧的更多相关文章

  1. C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  2. C#版 - Leetcode 504. 七进制数 - 题解

    C#版 - Leetcode 504. 七进制数 - 题解 Leetcode 504. Base 7 在线提交: https://leetcode.com/problems/base-7/ 题目描述 ...

  3. C#版 - Leetcode 306. 累加数 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  4. Leetcode 10. 正则表达式匹配 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  5. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  6. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

  7. 代码随想录算法训练营day07 | leetcode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

    LeetCode 454.四数相加II 分析1.0 这个最直接暴力法,不过过于暴力了,害怕.jpg 失误 读题理解失误:题目要求的是四元组的个数,读完题到我这里成了输出四元组,悲哉 分析2.0 记录有 ...

  8. Linux 线程(进程)数限制分析

    1.问题来源公司线上环境出现MQ不能接受消息的异常,运维和开发人员临时切换另一台服务器的MQ后恢复.同时运维人员反馈在出现问题的服务器上很多基本的命令都不能运行,出现如下错误:2.   初步原因分析和 ...

  9. leetcode@ [263/264] Ugly Numbers & Ugly Number II

    https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugl ...

  10. node.js基础模块http、网页分析工具cherrio实现爬虫

    node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...

随机推荐

  1. NodeJS安装指南(Mac)

    nvm,node,npm之间的区别 nvm:nodejs 版本管理工具. 也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本. nodejs:在项目开发时的所需要的代码库 npm:n ...

  2. MyBatis04——使用注解开发

    使用注解开发 MyBatis3提供了新的基于注解的配置,但是MyBatis映射并不能用注解来构建. sql类型主要分成: @select @update @insert @delete 注意:利用注解 ...

  3. Go-数据类型-布尔类型-bool

    布尔类型--bool 只有两个值 true false 不能转换成其他类型,也不能参加数值运算 布尔应用场景 if swicht for 三大分支语句中的条件部分 比较运算和逻辑运算的返回值 作为通道 ...

  4. Grafana监控minio的极简方法

    Grafana监控minio的极简方法 背景 想监控一下minio的部分信息. 使用过程中需要关注的内容挺多的. 只看简单的node感觉已经不够了. 所以想监控易一下. 方式和方法 minio其实集成 ...

  5. Widows 关闭 Defender的方法

    Study From MS reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (186)-- 算法导论14.1 3题

    三.用go语言,写出OS-SELECT的非递归版本. 文心一言: 下面是使用Go语言编写的OS-SELECT的非递归版本: func OS_SELECT(T *Node, k int) *Node { ...

  7. 范德蒙德矩阵行列式 & 循环矩阵行列式的证明

    范德蒙德矩阵的行列式 \[\begin{vmatrix} 1 & 1 & 1 & \dots & 1 \\ x_1 & x_2 & x_3 & ...

  8. 浅浅的源码剖析grpc-go(一)

    最近在学习 rpc 相关的知识,如果让我去从头设计一个 rpc,我从使用者的角度出发,究竟需要去做一下什么工作? 第一,RPC 本质上就是一个远程调用,那肯定就需要通过网络来传输数据.虽然传输协议可以 ...

  9. file文件转为base64

    场景描述 在工作中,我们经常需要进行文件上传. 比如在进行图片上传的时候, 我们需要将上传的图片展示出来. 这个时候我们就需要将file文件转化为base64. 将file文件转化为base64 // ...

  10. 设置echarts线的样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...