public int coinChange(int[] coins, int amount) {
int max = Integer.MAX_VALUE;
int[] dp = new int[amount + 1];
//初始化dp数组为最大值
for(int j = 0; j < dp.length; j++) {
dp[j] = max;
}
//当金额为0时需要的硬币数目为0
dp[0] = 0;
//先遍历物品,再遍历背包(本题先遍历谁都一样)
for(int i = 0; i < coins.length; i++) {
for(int j = coins[i];j <= amount; j++) {
//只有dp[j-coins[i]]不是初始最大值时,该位才有选择的必要
if(dp[j - coins[i]] != max) {
//dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
dp[j] = Math.min(dp[j], dp[j-coins[i]] + 1);
}
}
}
return dp[amount] == max ? -1 : dp[amount];//如果返回-1,表示没有硬币能够组成amount
}
零钱兑换——【LeetCode】
最新推荐文章于 2024-04-19 15:46:32 发布