LeetCode#263 Ugly Number

问题描述

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.

补充说明:

输入一个数字,判断这个数字是不是丑陋数。何为丑陋数,所谓的丑陋数就是如果一个数它的全部质因数在集合2、 3、 5这三个数字组成的集合中,则这个数字是丑陋数。

方案分析

  1. 要搞定这个问题,首先需要了解一个概念,叫做质因数。这里有个链接讲的特别生动,笔者就不赘述了。prime factor。
  2. 看懂上面那个链接的内容,想必大家都有了思路了吧。这个问题其实比求质因数还简单。因为这个已经限定了质因数的集合了。上代码,自己揣摩。

python实现

class Solution(object):
    def isUgly(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num == 0:
            return False
        check_list = [2, 3, 5]
        for i in check_list:
            while(num % i == 0):
                num /= i
            if num == 1:
                return True
        return False

方案分析2

  1. 在OJ上看到了另外一个解决方案,这个更加粗暴。你不是说质因素只能包含这3个数字的子集吗?好,就反复除以这3个数字,直到再无法进行下去。然后判断最后的结果数字是否为1。为1则表明只包含这3个数字的子集。

python实现2

class Solution(object):
    def isUgly(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num == 0: return False
        if num == 1: return True
        while(num % 2 == 0):
            num /= 2
        while(num % 3 == 0):
            num /= 3
        while(num % 5 == 0):
            num /= 5
        return num == 1

你可能感兴趣的:(LeetCode#263 Ugly Number)