518. 零钱兑换 II
- 学习文章链接:
- 思路:注意完全背包与01背包的遍历顺序,注意递推公式。
- 代码:
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];
}
}
377. 组合总和 Ⅳ
- 学习文章链接:
- 思路:这次应该叫排列总和,排列总和一定要先遍历背包,然后遍历物品。
- 代码:
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for (int i = 0; i <= target; i++) {
for (int j = 0; j < nums.length; j++) {
if (i >= nums[j]) dp[i] += dp[i - nums[j]];
}
}
return dp[target];
}
}