public int change(int amount, int[] coins) {
int n = coins.length;
//前i个硬币的面值,凑出金额j,有dp[i][j]种
int[][] dp = new int[n+1][amount+1];
for (int i = 0; i <= n; i++) {
dp[i][0] = 1; // 如果dp[0][0] 初始化为0会报上图中错
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= amount; j++) {
if (j - coins[i-1] < 0)
dp[i][j] = dp[i-1][j];
else
// 如果你把这第 i 个物品装入背包 + 如果你不把这第 i 个物品装入了背包
dp[i][j] = dp[i][j-coins[i-1]] + dp[i-1][j];
// 因为 j-coins[i-1] < j的,所以可以简化为 用一维数组
}
}
return dp[n][amount];
}
public int change(int amount, int[] coins) {
int n = coins.length;
//前i个硬币的面值,凑出金额j,有dp[i][j]种
int[] dp = new int[amount+1];
dp[0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 1; j <= amount; j++) {
if (j - coins[i] >= 0) {
// 如果你把这第 i 个物品装入背包 + 如果你不把这第 i 个物品装入了背包
dp[j] = dp[j - coins[i]] + dp[j];
}
}
}
return dp[amount];
}
518. 零钱兑换 II
最新推荐文章于 2024-08-28 16:03:48 发布