持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
一、题目描述:
给你一个整数 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 能等于1 不知深浅用while或者递归 注意:除法会使得精度不准确,譬如 3/2=1 ;导致后面的结果紊乱 所以借助 n % 2 == 0 满足余数等于0,方可进入计算
三、AC 代码:
class Solution {
public boolean isUgly(int n) {
while (n % 2 == 0 && n / 2 >= 1) {
n /= 2;
}
while (n % 3 == 0 && n / 3 >= 1) {
n /= 3;
}
while (n % 5 == 0 && n / 5 >= 1) {
n /= 5;
}
return n==1;
}
}
public boolean isUgly(int n) {
if (n%2==0&&n/2>=1){
n/=2;
return isUgly(n);
}
if (n%3==0&&n/3>=1){
n/=3;
return isUgly(n);
}
if (n%5==0&&n/5>=1){
n/=5;
return isUgly(n);
}
return n==1;
}
总结
简单题我重拳出击。丑数定义就是只含2、3、5公因子的数,那就一直取模判断,不符合直接false,符合再取整再递归,直到为1。
范文参考:
根据乘法交换律,不断除以三个质因数,丑数结果必然为1 - 丑数 - 力扣(LeetCode)