85 丑数(Ugly Number)

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 源码

细节:

  1. 除以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;
}

猜你喜欢

转载自blog.csdn.net/SeeDoubleU/article/details/124657720
85