代码随想录算法训练营第45天| 动态规划

LeetCode.70 爬楼梯(完全背包)

choose = [1, 2]
dp = [0] * (n + 1)
dp[0] = 1
for i in range(len(dp)):
    for j in choose:
        if i < j: break
        dp[i] += dp[i-j]
return dp[-1]

LeetCode.332 零钱兑换

dp = [float("inf")] * (amount+1)
dp[0] = 0
for i in range(len(dp)):
    for j in coins:
        if i < j: continue
        dp[i] = min(dp[i], dp[i-j]+1)
return -1 if dp[-1] == float("inf") else dp[-1]

LeetCode. 279 完全平方数

nums = [i*i for i in range(1, int(math.sqrt(n) + 1))]
dp = [float("inf")] * (n+1)
dp[0] = 0
for i in nums:
    for j in range(i, len(dp)):
        dp[j] = min(dp[j], dp[j-i]+1)
return dp[-1]

你可能感兴趣的:(算法,动态规划,python,数据结构)