【两次过】Lintcode 517.丑数

描述

写一个程序来检测一个整数是不是丑数

丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。

可以认为 1 是一个特殊的丑数。

样例

给出 num = 8,返回 true
给出 num = 14,返回 false

解题思路1:

    按照逻辑解就行,就是时间复杂度高。

class Solution {
public:
    /**
     * @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;
        if(num==1)
            return true;
        
        for(int i=2;i<=num/2;i++)
        {
            if(isPrime(i)&&num%i==0)
            {
                if(i!=2 && i!=3 && i!=5)
                    return false; 
            }
        }
        return true;
    }
    
    bool isPrime(int num)
    {
        for(int i=2;i<=sqrt(num);i++)
        {
            if(num%i==0)
                return false;
        }
        
        return true;
    }
};

解题思路2:

    从网上看的,如果一个数能连续被2整除,或连续被3整除,或连续被5整除,最后的数为1 即为丑数。
class Solution {
public:
    /**
     * @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;
        else
        {
            while(num%2==0)
            num/=2;
            while(num%3==0)
            num/=3;
            while(num%5==0)
            num/=5;
            
            return (num==1)?true:false;
        }
    }
    
};


猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80777661