题目
丑数 就是只包含质因数 2
、3
和 5
的正整数。
给你一个整数 n
,请你判断 n
是否为 丑数 。如果是,返回 true
;否则,返回 false
。
解题思路
我觉得刷题是为了扩宽思考的广度。看到这题的时候,我的大脑是发懵的,感觉到无从下手。
丑数的条件是只包含质因数2,3,5的正整数,这样我们可以通过循环的方式来进行每次的质因数的削减。如下:
while (n % 2 == 0) n /= 2;
最后通过判断n的值是否为1,进而判断n是否为丑数。
return n == 1;
不过还有一个前提,n需要是正整数。
if (n <= 0) return false;
调试过程
关于如何调试,可以看:Java刷题:移除数组中与k值相等的元素-CSDN博客
这里可以看出,在n为进入三个循环时,n=16
n进入第一个while循环出来后,n=1,因为16可以进行多次的第一次循环,并且由于n=1不满足下面两个循环的条件,故直接进行最后一步。
完整代码
class Solution {
public boolean isUgly(int n) {
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;
}
}
public class Test {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.isUgly(16));
}
}