// 零钱兑换,最少硬币数,动态规划
// 输入:coins = [1, 2, 5], amount = 11
// 输出:3
// 解释:11 = 5 + 5 + 1
public static int coinChange(int[] coins,int amount){
int max=amount+1;
// 凑成amount的最小硬币数状态
int[] dp=new int[amount+1];
Arrays.fill(dp,max);
// amount=0时为0
dp[0]=0;
// 控制凑成0-amount所需硬币数
for (int i = 1; i <=amount ; i++) {
// 选取硬币的面值
for (int j = 0; j <coins.length ; j++) {
// 面值小于当前amount才可以被选取
if(coins[j]<=i){
// 不选当前硬币面额coins[j]时为dp[i]
// 选取当前面额时由上一个可以选取的状态dp[i-coins[j]]加上当前选取硬币数1
dp[i]=Math.min(dp[i],dp[i-coins[j]]+1);
}
}
}
return dp[amount]>amount?-1:dp[amount];
}
零钱兑换-动态规划
最新推荐文章于 2025-12-26 18:13:00 发布
该代码展示了如何使用动态规划算法解决零钱兑换问题,给定一组硬币和一个总金额,找到组成总金额所需的最少硬币数。如果无法组成,返回-1。

677

被折叠的 条评论
为什么被折叠?



