前言说明
算法学习,日常刷题记录。
题目连接
题目内容
给你一个整数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整除的,那么不是丑数。
若能最后被整除到变成1,那就是丑数。
解答代码
class Solution {
public boolean isUgly(int num) {
if (num <= 0) {
// 丑数都是正整数
return false;
} else if (num == 1) {
// 1是丑数
return true;
} else {
// 先判断一次能否整除2、3、5
int n = divide(num);
if (n == -1) {
// 若返回-1,则不能整除2、3、5,不是丑数
return false;
} else if (n == 1) {
// 若结果为1,则是丑数
return true;
}
// 循环判断
while (n > 1) {
// 除2、3、5
n = divide(n);
if (n == -1) {
// 若返回-1,则不能整除2、3、5,不是丑数
return false;
}
}
return true;
}
}
// 除2、3、5
private int divide(int n) {
if (n % 2 == 0) {
return n / 2;
} else if (n % 3 == 0) {
return n / 3;
} else if (n % 5 == 0) {
return n / 5;
} else {
return -1;
}
}
}
提交结果
执行用时1ms,时间击败100.00%的用户,内存消耗35.5MB,空间击败48.98%的用户。
运行结果原文链接
原文链接:丑数
网友评论