开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情
263. 丑数 题目描述:丑数 就是只包含质因数 2
、3
和 5
的正整数。给你一个整数 n
,请你判断 n
是否为 丑数 。如果是,返回 true
;否则,返回 false
。。
示例1 | 示例2 | 示例3 |
---|---|---|
输入: 输出: 解释: | 输入: 输出: 解释: 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。 | 输入: 输出: 解释: 不是丑数,因为它包含了另外一个质因数 。 |
本文是 264. 丑数2 的引导篇。
因式分解
-
首先确定,如果 ,那么 就一定不是丑数,返回 即可。
-
其次,如果 是丑数,如果我们不断尝试让 ,最后一定会得到 。
解释:如果 是丑数,那么 一定可以分解成 ,其中 、、 取整数(可以为 )。可以先让 不断 ,直到 变成 ,同理,再不断 ,直到 最终变成
-
如果 不是丑数,即不能因式分解成 元素的乘积,或者可以分解成 元素的乘积,但同时存在非 的因子。
解释:如果 不是丑数,那么 一定可以分解成 ,其中 a、b、c取整数(可以为0), 是非 的整数。让 尝试 之后,最终 恒等于 ,又因为 ,所以用最终计算后的 与 比较即可知道原始的 是不是丑数。
同时除法存在交换律,所以先 ,还是 先 都没有关系,不会影响最终结果。
代码示例
/**
* 空间复杂度 O(1)
* 时间复杂度 O(logn)
*/
function isUgly(n: number): boolean {
if (n <= 0) return false;
while(n % 2 === 0) n /= 2;
while(n % 3 === 0) n /= 3;
while(n % 5 === 0) n /= 5;
return n === 1;
};