wap自助建站排板,济南广告设计公司前十名,wordpress提工单,自己怎么设计公司标志完全背包理论基础
完全背包和01背包问题唯一不同的地方就是#xff0c;每种物品有无限件。 体现在代码中就是对背包的遍历顺序不同。01背包是逆序遍历背包#xff0c;完全背包是顺序遍历背包。
518. 零钱兑换 II class Solution {public int change(int amount, int[] coin…完全背包理论基础
完全背包和01背包问题唯一不同的地方就是每种物品有无限件。 体现在代码中就是对背包的遍历顺序不同。01背包是逆序遍历背包完全背包是顺序遍历背包。
518. 零钱兑换 II class Solution {public int change(int amount, int[] coins) {//1、定义dp数dp[i]表示总金额为i时有n种拼凑方式int[] dpnew int[amount1];dp[0]1;//3、初始化当总金额为零时有一种方案for(int i0;icoins.length;i){//4、遍历顺序因为是完全背包所以正遍历for(int j1;jamount;j){if(jcoins[i]) dp[j]dp[j]dp[j-coins[i]];//2、递推公式}}return dp[amount];}
}时间复杂度: O(mn)其中 m 是amountn 是 coins 的长度 空间复杂度: O(m)
377. 组合总和 Ⅳ 注意 这道题看起来和上一题类似但有坑这道题是求排列数上道题是组合数。两种场景的代码上的区别体现在遍历顺序 组合问题先遍历物品再遍历背包 排列问题先遍历背包再遍历物品
class Solution {public int combinationSum4(int[] nums, int target) {int[] dpnew int[target1];//1、定义dp数组dp[0]1;//3、初始化for(int j1;jtarget;j){//4、遍历顺序排列数要先遍历背包再遍历物品for(int i0;inums.length;i){if(jnums[i]) dp[j]dp[j]dp[j-nums[i]];//2、递推公式}}return dp[target];}
}时间复杂度: O(target * n)其中 n 为 nums 的长度 空间复杂度: O(target)