代码随想录算法训练营第四十四天| 518.零钱兑换II、377. 组合总和 Ⅳ
518.零钱兑换II
题目链接:518.零钱兑换II
思路
完全背包,遍历背包的时候从前往后遍历背包
解题代码
func change(amount int, coins []int) int {
// 定义dp数组
dp := make([]int, amount+1)
// 初始化,0大小的背包, 当然是不装任何东西了, 就是1种方法
dp[0] = 1
// 遍历顺序
// 遍历物品
for i := 0 ;i < len(coins);i++ {
// 遍历背包
for j:= coins[i] ; j <= amount ;j++ {
// 推导公式
dp[j] += dp[j-coins[i]]
}
}
return dp[amount]
}
377. 组合总和 Ⅳ
题目链接:377. 组合总和 Ⅳ
思路
完全背包,先背包再物品
解题代码
func combinationSum4(nums []int, target int) int {
//定义dp数组
dp := make([]int, target+1)
// 初始化
dp[0] = 1
// 遍历顺序, 先遍历背包,再循环遍历物品
for j:=0;j<=target;j++ {
for i:=0 ;i < len(nums);i++ {
if j >= nums[i] {
dp[j] += dp[j-nums[i]]
}
}
}
return dp[target]
}