动态规划求解硬币兑换,代码用java表示
时间: 2023-08-04 08:32:32 浏览: 187
好的,以下是用Java语言实现的硬币兑换的动态规划算法代码:
```java
public class CoinChange {
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount + 1];
Arrays.fill(dp, amount + 1);
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i) {
dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
}
```
在上述代码中,我们首先定义了一个dp数组,用于存储硬币兑换的最小数量。我们使用Arrays.fill()方法将dp数组全部初始化为amount + 1,这是因为硬币兑换的最大数量就是amount,所以我们将dp数组初始化为比amount大1的值。
接着,我们将dp[0]的值初始化为0,因为当要兑换的金额为0时,我们不需要任何硬币就可以完成兑换。
然后,我们使用两个for循环遍历所有的金额和硬币种类。如果当前硬币的面值小于等于当前要兑换的金额,我们就可以使用这个硬币进行兑换。我们通过比较dp[i]和dp[i - coins[j]] + 1的大小,来确定使用这个硬币是否可以得到更少的硬币数量。
最后,我们返回dp[amount]的值,如果dp[amount]的值大于amount,说明无法完成兑换,返回-1即可。
阅读全文