func change(amount int, coins []int) int {
// 实质上为完全背包问题
// dp[j]:表示装满容量为j的背包的方法总数
dp := make([]int, amount+1)
//dp初始化
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]
}
func combinationSum4(nums []int, target int) int {
// 实质上为完全背包问题(排列问题,本质上为爬楼梯问题的拓展)
// dp[j]:表示装满容量为j的背包的方法总数
dp := make([]int, target+1)
//dp初始化
dp[0] = 1
//遍历顺序为先背包后物品(组合数)
for j := 1; j <= target; j++ {
for i := 0; i < len(nums); i++ {
if j >= nums[i] {//避免出现元素值为负数的情况
dp[j] += dp[j-nums[i]]
}
}
}
return dp[target]
}