题目:322. 零钱兑换
题目链接:链接
难度:中等
参考代码:
class Solution {
public int coinChange(int[] coins, int amount) {
Arrays.sort(coins);
int[] dp = new int[amount + 1];
// 最大cost
int maxCost = amount / coins[0] + 1;
Arrays.fill(dp, maxCost);
// amount为0时,需要凑0个硬币
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
int cost = maxCost;
for (int j = 0; j < coins.length; j++) {
if (i >= coins[j]) {
cost = Math.min(cost, 1 + dp[i - coins[j]]);
}
}
dp[i] = cost;
}
return dp[amount] == maxCost ? -1 : dp[amount];
}
}
这是一个关于算法解析的博客,主要介绍了如何利用动态规划解决寻找最小硬币组合(零钱兑换)的问题。给定不同面额的硬币和总金额,目标是找出最少的硬币数量来组成总金额。代码示例中,首先对硬币进行排序,然后初始化一个动态规划数组,并通过遍历所有可能的硬币组合找到最小成本。当无法用硬币组合成目标金额时,返回-1,否则返回所需硬币数。
1619

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



