Thursday, April 28, 2016

[LintCode] 517 Ugly Number 解题报告

Description
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.
For example, 6, 8 are ugly while 14 is not ugly since it includes another
prime factor 7.


Notice
Note that 1 is typically treated as an ugly number.


Example
Given num = 8 return true
Given num = 14 return false


思路
2,3,5是ugly number的质因数。那么给定一个数,要判断是不是ugly number,我们只需要不停去整除 这几个质因数。除不动了,判断一下除完的数是不是1。如果不是,说明还有其它质因数。这个数字就不是 ugly number。如果是1,我们确定这个数是ugly number。注意题目里说ugly number是个正数。


Code
public class Solution {
    /**
     * @param num an integer
     * @return true if num is an ugly number or false
     */
    public boolean isUgly(int num) {
        // Write your code here
        
        // corner case
        if (num < 1) {
            return false;
        }
        
        while (num % 2 == 0) {
            num /= 2;
        }
        while (num % 3 == 0) {
            num /= 3;
        }
        while (num % 5 == 0) {
            num /= 5;
        }
        
        return num == 1;
    }
}