package com.demo.test;
/**
* LeastCoins 硬币组合
*
* @author anjude
* @date 2021/9/27 16:05
*/
public class LeastCoins {
private int coins(int[] coins, int amount) {
int[] dp = new int[amount + 1];
for (int i = 1; i < dp.length; i++) {
dp[i] = -1;
}
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int coin : coins) {
// 如果硬币面额 coin 大于需要的总额,不作考虑;dp[i - coin] 可以通过加上 coin 面额达到需要的总额
if (i >= coin && dp[i - coin] != -1) {
// 如果 dp[i] <= 0 说明是第一个可以组成 i 的情况,直接加上这个面额的 coin,否则取当前情况和前面情况的最小值
if (dp[i] > 0) {
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
} else {
dp[i] = dp[i - coin] + 1;
}
}
}
}
return dp[amount];
}
public static void main(String[] args) {
int coins = new LeastCoins().coins(new int[]{1, 2, 5}, 12);
System.out.println(coins);
}
}
给定面额数组,最少硬币组合成固定一个数(各面额硬币数无限)Java版
最新推荐文章于 2023-01-18 19:27:53 发布