我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
连接:https://leetcode-cn.com/problems/chou-shu-lcof/
动态规划解题
class Solution:
def nthUglyNumber(self, n: int) -> int:
dp = [1] * n
a, b, c = 0, 0, 0 # 指针,分别代表指针指向的前面的数是否乘了2,3,5
for i in range(1, n):
dp[i] = min(dp[a]*2, dp[b]*3, dp[c]*5)
if dp[i] == dp[a] * 2:
a += 1
if dp[i] == dp[b] * 3:
b += 1
if dp[i] == dp[c] * 5:
c += 1
return dp[-1]
递推公式
设置3个索引a, b, c,分别记录前几个数已经被乘2, 乘3, 乘5了,比如a表示前(a-1)个数都已经乘过一次2了,下次应该乘2的是第a个数;b表示前(b-1)个数都已经乘过一次3了,下次应该乘3的是第b个数;c表示前(c-1)个数都已经乘过一次5了,下次应该乘5的是第c个数