LeetCode-322-零钱兑换

思路
使用动态规划来解决,dp[i]表示填满容量i需要的硬币数
初始化
dp[0]=0,dp[i]=amount+1
状态转移
dp[i]=min(dp[i],dp[i-coin]+1)//表示dp[i-coin]加上当前一个硬币
返回
dp[amount]==amount+1?-1:dp[amount];//无法-1
代码
class Solution {
public int coinChange(int[] coins, int amount) {
int n=coins.length;
int []dp=new int[amount+1];
Arrays.fill(dp,amount+1);
dp[0]=0;
for(int coin:coins){
for(int i=coin;i<=amount;i++){
dp[i]=Math.min(dp[i],dp[i-coin]+1);//表示dp[i-coin]加上当前一个硬币
}
}
return dp[amount]==amount+1?-1:dp[amount];
}
}
本文解析了如何使用动态规划解决LeetCode中的322题零钱兑换问题,通过实例演示了状态转移方程和代码实现,重点在于理解状态转移和最小化硬币数的思路。
1218

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



