[264][中等][动态规划][三指针][堆] 丑数 II
最后更新于
最后更新于
class Ugly:
def __init__(self):
self.cache = [1]
p2, p3, p5 = 0, 0, 0
for i in range(1690):
res2, res3, res5 = self.cache[p2] * 2, self.cache[p3] * 3, self.cache[p5] * 5
new_number = min([res2, res3, res5])
self.cache.append(new_number)
p2 = p2 + 1 if new_number == res2 else p2
p3 = p3 + 1 if new_number == res3 else p3
p5 = p5 + 1 if new_number == res5 else p5
class Solution:
ugly = Ugly()
def nthUglyNumber(self, n: int) -> int:
return self.ugly.cache[n - 1]class Ugly:
def __init__(self):
self.cache = []
heap = [1]
heapq.heapify(heap)
seen = set([1])
for _ in range(1690):
t_ugly = heapq.heappop(heap)
self.cache.append(t_ugly)
for i in [2, 3, 5]:
new_ugly = t_ugly * i
if new_ugly not in seen:
heapq.heappush(heap, new_ugly)
seen.add(new_ugly)
class Solution:
ugly = Ugly()
def nthUglyNumber(self, n: int) -> int:
return self.ugly.cache[n - 1]