壹 ❀ 引

本题来自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. TOEFL | 202307 改革 · 新版题型总结

    目录 Listening(36min) Reading(35min) Speaking(16min) Writing(29min) Listening(36min) 2 conversation,3 ...

  2. kafka Linux环境搭建安装及命令创建队列生产消费消息

    本文为博主原创,未经允许不得转载: 1. 安装JDK 由于Kafka是用Scala语言开发的,运行在JVM上,因此在安装Kafka之前需要先安装JDK. yum install java‐1.8.0‐ ...

  3. WPF Prism框架Region失效了?

    站长最近转载了痕迹的Prism 8系列博文,不知道你对该框架是否有一定了解了?不了解,可以看看本号转载的系列: WPF Prism框架合集(2.创建Prism应用程序) WPF Prism框架合集(3 ...

  4. [转帖]设置CMD默认代码页为65001或936

    https://www.cnblogs.com/songzhenhua/p/9312769.html 之前不知道怎么改的,CMD的代码页被默认设置成了65001   但我右击CMD标题,选择'默认值' ...

  5. [转帖]“炫技” 还是 “真硬核”,OpenPPL 实测阿里「倚天 710」芯片

    https://my.oschina.net/openppl/blog/5524424   本文将以深度学习模型推理应用为出发点,对「倚天 710」这款 ARM Server 芯片进行性能方面的实测. ...

  6. Grub2 内核启动参数总结

    Grub2 内核启动参数总结 部分参数 biosdevname=0 net.ifnames=0 # 注意这个配置会修改网卡的名字, 比如之前是ens192 # 添加如上两个内容后就会变成 eth0 类 ...

  7. [转帖]AF_UNIX 本地通信

    文章目录 一.AF_UNIX 本地通信 1. Linux进程通信机制 2. socket本地域套接字AF_UNIX 3. demo示例 二.AF_INET域与AF_UNIX域socket通信原理对比 ...

  8. [转帖]datax安装+配置+使用文档

    1 DataX离线同步工具DataX3.0介绍 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hiv ...

  9. [转帖]CentOS-7-x86_64-DVD-2009 rpm包列表(centos7.9)

    https://www.cnblogs.com/hiyang/p/14803391.html 文件数 4071 个,共3.8G 复制389-ds-base-1.3.10.2-6.el7.x86_64. ...

  10. [转帖]实战瓶颈定位-我的MySQL为什么压不上去–写场景

    https://plantegg.github.io/2023/06/30/%E5%AE%9E%E6%88%98%E7%93%B6%E9%A2%88%E5%AE%9A%E4%BD%8D-%E6%88% ...