題目
難度:★☆☆☆☆
類型:數(shù)學(xué)
編寫一個(gè)程序判斷給定的數(shù)是否為丑數(shù)。
丑數(shù)就是只包含質(zhì)因數(shù) 2, 3, 5 的正整數(shù)。
說(shuō)明:
- 1 是丑數(shù)。
- 輸入不會(huì)超過 32 位有符號(hào)整數(shù)的范圍: [?231, 231 ? 1]。
示例
示例 1:
輸入: 6
輸出: true
解釋: 6 = 2 × 3
示例 2:
輸入: 8
輸出: true
解釋: 8 = 2 × 2 × 2
示例 3:
輸入: 14
輸出: false
解釋: 14 不是丑數(shù),因?yàn)樗肆硗庖粋€(gè)質(zhì)因數(shù) 7。
解答
這道題我們可以用循環(huán)去做:
只要數(shù)字中包含因子2、3或5,我們就除以這個(gè)因子,直到這個(gè)數(shù)變?yōu)?或者變?yōu)闊o(wú)法被2、3和5整除的數(shù);
注意考慮輸入為負(fù)數(shù)、零和1等特殊情況。
class Solution(object):
def isUgly(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 0: # 特殊情況,特殊對(duì)待
return False
while True: # 死循環(huán)
if num == 1: # 如果輸入為1或num變成1
return True # 說(shuō)明是丑數(shù)
if num % 2 == 0: # 如果是2的倍數(shù)
num = num // 2 # 則除以2
elif num % 3 == 0: # 如果是3的倍數(shù)
num = num // 3 # 則除以3
elif num % 5 == 0: # 如果是5的倍數(shù)
num = num // 5 # 則除以5
else: # 如果都不是
return False # 則一定不是丑數(shù)
如有疑問或建議,歡迎評(píng)論區(qū)留言~