Leetcode 263. Ugly Number--是正數,並且質因子是2,3,5
阿新 • • 發佈:2019-01-06
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.