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];
    }
}
posted @ 2023-02-28 00:01  黄三七  阅读(15)  评论(0)    收藏  举报