Ugly Number
只能2,3,5整除,那就模2,3,5就是了,递归迭代都很容易写
class Solution(object):
def isUgly(self, num):
"""
:type num: int
:rtype: bool
"""
if 0 < num <= 10:
return num != 7
if num <= 0:
return False
flag = False
if num % 2 == 0:
num /= 2
flag = True
if num % 3 == 0:
num /= 3
flag = True
if num % 5 == 0:
num /= 5
flag = True
return self.isUgly(num) if flag else False
Ugly Number II
首先是用堆来约束顺序的方法,注意需要set查重,时间复杂度O(nlgn)
class Solution(object):
def nthUglyNumber(self, n):
"""
:type n: int
:rtype: int
"""
count = 0
heap = [1]
result = None
checker = set([1])
while count < n:
node = heapq.heappop(heap)
result = node
count += 1
if node * 2 not in checker:
checker.add(node * 2)
heapq.heappush(heap, node * 2)
if node * 3 not in checker:
checker.add(node * 3)
heapq.heappush(heap, node * 3)
if node * 5 not in checker:
checker.add(node * 5)
heapq.heappush(heap, node * 5)
return result