题目描述
编写一个程序判断给定的数是否为丑数。
丑数就是只包含质因数 2
, 3
, 5
的正整数
样例
输入: 6
输出: true
解释: 6 = 2 × 3
输入: 8
输出: true
解释: 8 = 2 × 2 × 2
输入: 14
输出: false
解释: 14 不是丑数,因为它包含了另外一个质因数 7。
说明:
1
是丑数。- 输入不会超过
32
位有符号整数的范围:[−2^31, 2^31 − 1]
算法分析
- 若当前数能整除
2
,3
,5
,则一直整除2
,3
,5
,直到不能整除为止,判断最后的数是否等于1
即可,如果不是1
就说明还有其他因子
时间复杂度 $O(logn)$
代码
class Solution {
public boolean isUgly(int num) {
if(num <= 0) return false;
while(num % 2 == 0) num /= 2;
while(num % 3 == 0) num /= 3;
while(num % 5 == 0) num /= 5;
return num == 1;
}
}