【代码随想录训练营】【Day 46】【动态规划-6】| Leetcode 518, 377
需强化知识点
- 完全背包基础(遍历重量时 正序,保证物品可重复加入)
- 完全背包:组合问题,先物品后重量,排列问题,先重量后物品
题目
518. 零钱兑换 II
- 完全背包 组合问题,先物品后重量
- 代码随想录思路:组合 和 排列
python
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
# 金额 i 的 组成方式数量
dp = [0] * (amount + 1)
dp[0] = 1
for coin in coins:
for i in range(coin, amount + 1):
dp[i] += dp[i-coin]
return dp[amount]
377. 组合总和 Ⅳ
- 完全背包:排列问题,先重量后物品
python
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
# 总和为 i 的组合个数
dp = [0] * (target+1)
dp[0] = 1
for i in range(1, target+1):
for num in nums:
if i >= num:
dp[i] += dp[i-num]
return dp[target]