Leetcode Day15 2
剑指 Offer 49. 丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
这道题用的大佬的dp思路,p2、p3、p5类似于指针,比较当前×的数字,取最小值然后递增。
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]
