解题思路
非常典型的DP
提交代码
class Solution {
public int coinChange(int[] coins, int amount) {
if(amount==0) return 0;
for(int coin : coins)
if(amount==coin) return 1;
int[] cnt=new int[amount];
for(int i=0;i<amount;i++) {
cnt[i]=Integer.MAX_VALUE;
for(int coin:coins) {
if(i+1<coin) continue;
else if(i+1==coin) {
cnt[i]=1;
continue;
}else {
if(cnt[i-coin]==Integer.MAX_VALUE) continue;
cnt[i]=Math.min(cnt[i], cnt[i-coin]+1);
}
}
}
return cnt[amount-1]==Integer.MAX_VALUE?-1:cnt[amount-1];
}
}
运行结果

本文深入探讨了硬币找零问题的经典动态规划(DP)解决方案,通过一个具体示例,展示了如何使用DP思想来求解最小硬币数量以组成特定金额。代码中详细解释了状态转移方程及边界条件的设定,为读者提供了清晰的实现路径。
854

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



