263. Ugly Number
https://leetcode.com/problems/ugly-number/description/
这道题比较简单,相当于从num中不断除去2,3,5,最后比较结果是否为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/
解法相当于利用了3个指针,每次取三种可能结果里最小的。
需要注意的是每个判断都需要用if单独判断,使用elif会错误。因为result[i2]2和result[i3]3可能相等,例如32==23,此时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]