263. Ugly Number
https://leetcode.com/problems/ugly-number/description/
這道題比較簡單,相當(dāng)于從num中不斷除去2,3,5,最后比較結(jié)果是否為1即可。
代碼如下:
class Solution:
def isUgly(self, num):
"""
:type num: int
:rtype: bool
"""
if num <= 0:
return False
for i in (2, 3, 5):
while num % i == 0:
num /= i
return num == 1
264. Ugly Number II
https://leetcode.com/problems/ugly-number-ii/description/
解法相當(dāng)于利用了3個(gè)指針,每次取三種可能結(jié)果里最小的。
需要注意的是每個(gè)判斷都需要用if單獨(dú)判斷,使用elif會(huì)錯(cuò)誤。因?yàn)閞esult[i2]2和result[i3]3可能相等,例如32==23,此時(shí)i2和i3都需要加1才正確。
代碼如下:
class Solution:
def nthUglyNumber(self, n):
"""
:type n: int
:rtype: int
"""
result = [1]
i2, i3, i5 = 0, 0, 0
for i in range(1, n):
u2, u3, u5 = result[i2]*2, result[i3]*3, result[i5]*5
umin = min((u2, u3, u5))
if umin == u2:
i2 += 1
if umin == u3:
i3 += 1
if umin == u5:
i5 += 1
result.append(umin)
return result[-1]