动态规划硬币java代码实现
时间: 2023-07-08 22:42:46 浏览: 84
动态规划代码java
以下是使用Java语言实现动态规划硬币问题的代码:
```java
public static 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];
}
```
其中,coins是表示硬币面值的数组,amount是要凑出的总价值。首先创建一个大小为amount+1的数组dp,用于记录凑出每个价值所需要的最少硬币数。由于最多需要amount个硬币,所以将dp数组初始化为amount+1,表示无法凑出该价值。将dp[0]初始化为0,因为凑出总价值为0时不需要任何硬币。
接下来使用两个for循环,外层循环枚举要凑出的价值i,内层循环枚举硬币面值。如果硬币面值小于等于i,则可以使用该硬币,更新dp[i]的值。具体更新方式为,如果使用面值为coins[j]的硬币,则还需要凑出i-coins[j]的价值,所以dp[i]可以更新为dp[i - coins[j]] + 1,表示使用该硬币再加上凑出i-coins[j]所需要的最少硬币数。
最后返回dp[amount]的值,如果dp[amount]仍然为amount+1,则表示无法凑出该价值,返回-1即可。
阅读全文