1 题目
题目:丑数(Ugly Number)
描述:写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数因为他包含了质因子 7。可以认为 1 是一个特殊的丑数。
lintcode题号——517,难度——easy
样例1:
输入: num = 8
输出: true
解释:8=2*2*2
样例2:
输入: num = 14
输出: false
解释:14=2*7
2 解决方案
2.1 思路
丑数只包含质数因子,所以将目标数在能够整除的情况下,一直除以2、3、5,先除哪个数不影响结果,最终一定会得到一个质数,得到的数如果为1,则是丑数,如果不为1,因为得到的数就是原数的一个质数因子,则证明该数不是丑数。
2.3 时间复杂度
考虑最坏的情况,每次都是整除2,耗时为O(log n),时间复杂度为O(log n)。
2.4 空间复杂度
空间复杂度为O(1)。
3 源码
细节:
- 除以2/3/5的顺序不重要,最后结果是一样的。
C++版本:
/**
* @param num: An integer
* @return: true if num is an ugly number or false
*/
bool isUgly(int num) {
// write your code here
if (num < 0)
{
return false;
}
while (num >= 2 && num % 2 == 0)
{
num /= 2;
}
while (num >= 3 && num % 3 == 0)
{
num /= 3;
}
while (num >= 5 && num % 5 == 0)
{
num /= 5;
}
if (num == 1)
{
return true;
}
return false;
}