丑数的定义:
丑数 就是只包含质因数 2、3 和 5 的正整数。
需求:给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
分析问题:
根据丑数的定义,0和负整数一定不是丑数。如果n>0,且n是丑数,我们可以将n写为:
n = 2^a * 3^b * 5^c(a、b、c是幂,且是非负数)。
当a 、b、c都为零时n=1;所以只要我们将n一直除以 2 ,3 ,5 ,也就是让n不再包含质因数 2 ,3 ,5 ,除完后剩下的数如果等于1,说明n不包含其他(除 2 ,3 ,5)以外的因数,所以是丑数;不然的话说明他具有其他质因数,不是丑数。
通俗理解:
丑数 = 2^a * 3^b * 5^c,他一定是满足这个公式,只要丑数的值取决于(a、b、c)。
我们要判断n是否为丑数,则它如果能写成上面的公式就是丑数。
示例代码一:
class Solution {
public boolean isUgly(int n) {
if (n <= 0) {
return false;
}
int[] factors = {2, 3, 5};
for (int factor : factors) {
while (n % factor == 0) {
n /= factor;
}
}
return 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;
}
}