day44 动态规划part6 代码随想录算法训练营 518. 零钱兑换 II

题目:518. 零钱兑换 II

我的感悟:

  • 递推公式,我没写错。
  • 是初始化写错了。
  • 这种求多少种的,要考虑1种,是空集合选1中。而那些考虑能背最大的价值,要从0初始化,0的含义值无价值。
  •  

理解难点:

  • 递推公式,是累加dp[j] += dp[j-conins[i]]
  • 初始化的含义 dp[0] = 1

听课笔记:

  • 补充的一点,for循环遍历顺序
  • 这里先遍历物品是组合
  • 如果先遍历背包,就是排列。

代码示例:

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp = [0]  * (amount +1)
        dp[0] = 1   # 种类的初始化为1,求的是集合()
        for i in range(len(coins)):
            for j in range(coins[i],amount+1):
                dp[j] += dp[j-coins[i]] # 凑成的种类
        # print(dp)
        return dp[amount]

通过截图:

扩展写法:

资料:

  1. 零钱兑换 II  

视频讲解:https://www.bilibili.com/video/BV1KM411k75j

https://programmercarl.com/0518.%E9%9B%B6%E9%92%B1%E5%85%91%E6%8D%A2II.html

posted @ 2024-02-28 13:18  o蹲蹲o  阅读(7)  评论(0编辑  收藏  举报