版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/85856665
Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
.
Example 1:
Input: 6 Output: true Explanation: 6 = 2 × 3
Example 2:
Input: 8 Output: true Explanation: 8 = 2 × 2 × 2
Example 3:
Input: 14 Output: false Explanation:14
is not ugly since it includes another prime factor7
.
Note:
1
is typically treated as an ugly number.- Input is within the 32-bit signed integer range: [−231, 231 − 1].
要特别注意Note 2的提示,可能会输入负数,但是只有正数才可能是丑数,不然很容易造成超时!
public class Leetcode_263_UglyNumber {
public static void main(String[] args) {
Leetcode_263_UglyNumber leetcode_263_uglyNumber = new Leetcode_263_UglyNumber();
System.out.println(leetcode_263_uglyNumber.isUgly(45 * 45 * 45));
}
/**
* 2ms
*
* @param num
* @return
*/
public boolean isUgly(int num) {
//Ugly number is positive!,没有这句的话导致 Time Limit Exceeded
if (num <= 0) {
return false;
}
while (num % 2 == 0) {
num = num / 2;
}
while (num % 3 == 0) {
num = num / 3;
}
while (num % 5 == 0) {
num = num / 5;
}
// if (num == 1) {
// return true;
// } else {
// return false;
// }
// return num == 1 ? true : false;
return num == 1;
}
/**
* 优化后 2ms
*
* @param num
* @return
*/
public boolean isUgly2(int num) {
if (num <= 0) {
return false;
}
for (int i = 2; i < 6; i++) {
while (num % i == 0) {
num /= i;
}
}
return num == 1;
}
/**
* 第二次优化后 30 ms
*
* @param num
* @return
*/
public boolean isUgly3(int num) {
for (int i = 2; i < 6 && num > 0; i++) {
while (num % i == 0) {
num /= i;
}
}
return num == 1;
}
}
Runtime: 2 ms, faster than 43.61% of Java online submissions for Ugly Number.