LeetCode #263 Ugly Number 丑数

263 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.

Example :

Example 1:
Input: 6
Output: true
Explanation: 6 = 2 × 3

Example 2:
Input: 8
Output: true
Explanation: 8 = 2 × 2 × 2

Example 3:
Input: 14
Output: false
Explanation: 14 is not ugly since it includes another prime factor 7.

Note:
1 is typically treated as an ugly number.
Input is within the 32-bit signed integer range: [−2^31, 2^31 − 1].

题目描述:
编写一个程序判断给定的数是否为丑数。

丑数就是只包含质因数 2, 3, 5 的正整数。

示例 :

示例 1:
输入: 6
输出: true
解释: 6 = 2 × 3

示例 2:
输入: 8
输出: true
解释: 8 = 2 × 2 × 2

示例 3:
输入: 14
输出: false
解释: 14 不是丑数,因为它包含了另外一个质因数 7。

说明:
1 是丑数。
输入不会超过 32 位有符号整数的范围: [−2^31, 2^31 − 1]。

思路:

判断能否除尽 2/3/5即可
可以用迭代或者递归
时间复杂度O(lgn), 空间复杂度O(1)

代码:
C++:

class Solution 
{
public:
    bool isUgly(int num) 
    {
        if (num < 1) return false;
        if (num == 1) return true;
        if (!(num & 1)) return isUgly(num >> 1);
        if (!(num % 3)) return isUgly(num / 3);
        if (!(num % 5)) return isUgly(num / 5);
        return false;
    }
};

Java:

class Solution {
    public boolean isUgly(int num) {
        if (num < 1) {
            return false;
        }
        while ((num & 1) == 0) num >>= 1;
        while (num % 3 == 0) num /= 3;
        while (num % 5 == 0) num /= 5;
        return num == 1;
    }
}

Python:

class Solution:
    def isUgly(self, num: int) -> bool:
        if num < 1:
            return False
        if num == 1:
            return True
        while not num & 1:
            num >>= 1
        while not num % 3:
            num //= 3
        while not num % 5:
            num //= 5
        return num == 1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容