问题描述
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.
Note that 1
is typically treated as an ugly number.
思路分析
判断一个整数是不是ugly number。定义是因数只有2,3,5的数是ugly的。
首先判断0,1的情况。然后根据定义循环除这三个数,如果最后剩下的数为1说明只有这三个数为因数,返回true;否则就还有其他因数,返回false。
代码
class Solution {
public:
bool isUgly(int num) {
if (num == 1)
return true;
if (num == 0)
return false;
while (num % 2 == 0)
num = num / 2; //same to num >> 1,right shift 1 digit.
while (num % 3 == 0)
num = num / 3;
while (num % 5 == 0)
num = num / 5;
return num == 1;
}
};
时间复杂度:
O(logn)
空间复杂度:
O(1)
反思
又是一道数学题,感觉只要找到了定义或者接触过就会做的。