1.题目

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。

示例:

  1. 输入:n = 6
  2. 输出:true
  3. 解释:6 = 2 × 3
  4. 输入:n = 8
  5. 输出:true
  6. 解释:8 = 2 × 2 × 2
  7. 输入:n = 14
  8. 输出:false
  9. 解释:14 不是丑数,因为它包含了另外一个质因数 7
  10. 输入:n = 1
  11. 输出:true
  12. 解释:1 通常被视为丑数。

提示:

  • -2^31 <= n <= 2^31 - 1

2.思路

根据丑数的定义,0和正整数一定不是丑数

当n > 0时,若n是丑数,则n可以写成n = 2^a × 3^b × 5^c,其中 a,b,c都是非负整数。特别地,当 a,b,c 都是 0 时,n=1。

可以对 n 反复除以 2,3,5,直到 n 不再包含质因数 2,3,5。若剩下的数等于 1,则说明 n不包含其他质因数,是丑数;否则,说明 n 包含其他质因数,不是丑数。

  1. public boolean isUgly(int n) {
  2. if (n <= 0) {
  3. return false;
  4. }
  5. int[] factors = {2, 3, 5};
  6. for (int factor : factors) {
  7. while (n % factor == 0) {
  8. n /= factor;
  9. }
  10. }
  11. return n == 1;
  12. }