518. 零钱兑换 II
https://leetcode-cn.com/problems/coin-change-2/
解法一:暴力dfs递归(超时)
为防止重复,dfs函数设一个start,每次从start向后循环(不回头)
解法二:dp
dp[i][j]
的定义如下: 若只使用前 i 个物品(可以重复使用),当背包容量为 j 时,有dp[i][j]
种方法可以装满背包。 i=0表示不取,因此对coins从1开始遍历,i对应coins[i-1] 状态转移:
dp[i][j]
的值应该是以上两种选择的结果之和 base case:
第二条比较难理解,也是dp的关键。 为啥凑0也算一种凑法?例如5=0+5也算一种,因此dp[i][0]=1
虽然第二个状态看上去是0,在迭代中实际操作是取单个第i个数,所以也算一种
最后更新于