题目描述
https://leetcode-cn.com/problems/chou-shu-lcof/
思路题解
https://leetcode-cn.com/problems/chou-shu-lcof/solution/chou-shu-by-leetcode-solution-0e5i/
dp
class Solution:
def nthUglyNumber(self, n: int) -> int:
dp = [0] * (n + 1)
dp[1] = 1
p2 = p3 = p5 = 1
for i in range(2, n + 1):
num2, num3, num5 = dp[p2] * 2, dp[p3] * 3, dp[p5] * 5
dp[i] = min(num2, num3, num5)
if dp[i] == num2:
p2 += 1
if dp[i] == num3:
p3 += 1
if dp[i] == num5:
p5 += 1
return dp[n]
最小堆
class Solution:
def nthUglyNumber(self, n: int) -> int:
if n==0:return 0
import heapq
h=[]
m={}
heapq.heappush(h,1)
count=1
while count<=n:
t=heapq.heappop(h)
if 2*t not in m:
heapq.heappush(h,2*t)
m[2*t]=1
if 3*t not in m:
heapq.heappush(h,3*t)
m[3*t]=1
if 5*t not in m:
heapq.heappush(h,5*t)
m[5*t]=1
count+=1
return t