題目
難度:★☆☆☆☆
類型:數(shù)學(xué)
編寫一個(gè)程序判斷給定的數(shù)是否為丑數(shù)设塔。
丑數(shù)就是只包含質(zhì)因數(shù) 2, 3, 5 的正整數(shù)全跨。
說明:
- 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法被2澎办、3和5整除的數(shù);
注意考慮輸入為負(fù)數(shù)金砍、零和1等特殊情況局蚀。
class Solution(object):
def isUgly(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 0: # 特殊情況,特殊對待
return False
while True: # 死循環(huán)
if num == 1: # 如果輸入為1或num變成1
return True # 說明是丑數(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ū)留言~