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号