用java写出考虑著名找零问题的一般情形:需找零金额为n,最少要用多少面值为d1<d2<…<dm的硬币?
时间: 2023-09-30 14:06:03 浏览: 102
java硬币最少
以下是用Java实现找零问题的代码:
```java
public static int minCoins(int[] coins, int n) {
int[] dp = new int[n + 1];
Arrays.fill(dp, Integer.MAX_VALUE);
dp[0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i && dp[i - coins[j]] != Integer.MAX_VALUE) {
dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
}
}
}
return dp[n];
}
```
其中,`coins`是硬币面值的数组,`n`是需找零的金额。我们使用一个一维数组`dp`来记录每个金额需要的最小硬币数。对于每个金额`i`,我们遍历硬币面值数组`coins`,如果当前硬币面值`coins[j]`小于等于`i`,并且`i-coins[j]`的最小硬币数不为无穷大,则更新`dp[i]`为`dp[i-coins[j]]+1`,即当前硬币面值`coins[j]`需要的硬币数加上`i-coins[j]`需要的最小硬币数。最后返回`dp[n]`即可。
阅读全文