day44
1、leetcode518 零钱兑换Ⅱ【完全背包应用】【求组合数】
class Solution {
    public int change(int amount, int[] coins) {
        int[] dp = new int[amount+1];
        dp[0] = 1;
        for(int i=0; i<coins.length; i++) {//遍历物品
            for(int j=coins[i]; j<=amount; j++) {//遍历背包
                dp[j] += dp[j-coins[i]];
            }
        }
        return dp[amount];
    }
}
注意:
- 先遍历物品,再遍历背包 ===》 dp[j]里计算的是组合数!(不讲究顺序)
- 先遍历背包,再遍历物品 ===》 dp[j]里计算的是排列数!(讲究顺序)
2、leetcode377 组合总和Ⅳ【完全背包应用】【求排列数】
class Solution {
    public int combinationSum4(int[] nums, int target) {
        int dp[] = new int[target+1];
        dp[0] = 1;
        for(int j=0; j<=target; j++) {//遍历背包
            for(int i=0; i<nums.length; i++) {//遍历物品
                if (j >= nums[i]) {
                    dp[j] += dp[j-nums[i]];   
                }
            }
        }
        return dp[target];
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号