// 完全背包问题
class Solution {
public int coinChange(int[] coins, int amount) {
// todo 1. 如果amount为0,返回0
if (amount == 0) return 0;
// todo 2. 设置dp
int[] dp = new int[amount + 1]; // 由于dp【0】= 0
Arrays.fill(dp, amount + 1);
dp[0] = 0;
// todo 3. 开始递推
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
// todo 4. 如果不选当前硬币,那就是之前的最小值,如果选了当前硬币,那就是dp【i-j】+1
if (i >= coins[j]){
dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
}
}
}
// 如果 dp[amount] 仍为初始值 amount + 1,则表示无法凑出
return dp[amount] > amount ? -1 : dp[amount];
}
}
Hot100【五十二】:322. 零钱兑换
于 2024-04-24 00:14:06 首次发布