开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
一、题目描述:
263. 丑数 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数 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 通常被视为丑数。
提示:
- -2^31 <= n <= 2^31 - 1
二、思路分析:
丑数的质因数只有2、3、5,意味着丑数是可以被2、3、5除尽的,那么余数自然也为 0
为了证明某个数字是否为一个真正的丑数
是需要将该数字除以 2、3或5,最后直到被除数为 1 时,才能最终确定该数字是否丑数
当然如果有更巧妙的解法另当别论
因此,能被2、3、5除尽是一个基本的判断条件,但不能决定该数字是否为丑数
负数是否丑数,答案是不可能的
因为两个负数相乘必然为正数
如果 n 为负数,假设 n 为 -6
两个因数相乘结果为 -6 必然是 -2 * 3 或 3 * -2
那么根据条件 1,这是违背丑数的定义的。
三、AC 代码:
class Solution {
public boolean isUgly(int n) {
while(n > 1){
if(n % 2 == 0) {
n /= 2;
} else if(n % 3 == 0){
n /= 3;
} else if(n % 5 == 0){
n /= 5;
} else {
return false;
}
}
return n > 0;
}
}
可以反过来这么理解,一个丑数n=2^a3^b5^c,必然是多个2,3,5相乘,逐个除尽即可
范文参考: