LeetCode——丑数
题目描述:
编写一个程序判断给定的数是否为丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。
示例 1:
输入: 6
输出: true
解释: 6 = 2 × 3
示例 2:
输入: 8
输出: true
解释: 8 = 2 × 2 × 2
示例 3:
输入: 14
输出: false
解释: 14 不是丑数,因为它包含了另外一个质因数 7。
说明:
1 是丑数。
输入不会超过 32 位有符号整数的范围: [−231, 231 − 1]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ugly-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
首先我们要判断n是不是为1,如果是1直接返回True;
判断n是否小于等于0,如果小于等于0返回False。
解法一:
我们用最传统的方法求这个数的每个因子:
从最小的因子2开始,如果n能够整除因子,则判断该因子是否是2, 3,5,如果不是返回False,如果是就更新n的值;如果n不能整除因子,就更新因子的值。循环结束的条件是n小于因子。
此方法理论可行,但是在LeetCode上因为时间限制有测试用例通不过。
解法二:
我们让n一直除以2,直到不能整除为止;
同样的,一直除以3直到不能整除为止;
一直除以5直到不能整除为止;
最后如果n等于0,则n不是丑数;如果n等于1,则n是丑数。
解法一python代码:
class Solution(object):
def isUgly(self, n):
"""
:type n: int
:rtype: bool
"""
if n == 1:
return True
if n <= 0:
return False
yz = 2
while n >= yz:
if n % yz == 0:
if yz != 2 and yz != 3 and yz != 5:
return False
else:
n //= yz
else:
yz += 1
return True
解法二python代码:
class Solution(object):
def isUgly(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
if n == 1:
return True
while n % 2 == 0:
n //= 2
while n % 3 == 0:
n //= 3
while n % 5 == 0:
n //= 5
return n == 1