注意点&感悟:
- 跟卡尔的57题不一样,57爬楼梯,物品是m,背包是total总台阶数量,每次爬楼梯的m个
for i in range(1,m+1)
选择是有限的 - 377组合是,给的nums是物品,背包是target目标, 每次这些物品都能选,选择是全部遍历一遍。
for i in range(len(nums))
全部遍历
题目链接:377. 组合总和 Ⅳ
自己独立写的代码:
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
# 完全背包问题(可以选多次)
# 属于完全背包问题下的求种类问题
# 需要先遍历背包,后遍历物品
# 背包容量是target
# 物品集和是nums(全部物品)
# 递推公式为dp[j]+=dp[j-nums[i]]
dp = [0] * (target+1)
dp[0] = 1
for j in range(target+1):
for i in range(len(nums)):
if j>= nums[i]:
dp[j] += dp[j-nums[i]]
return dp[target]