该题要使用动态规划,参考了链接:
https://blog.csdn.net/happyaaaaaaaaaaa/article/details/50976088
中的第二种方法,主要思路是用一个数组dp来存储硬币的数量,例如数组中第 i 个元素就保存达到目标金额为 i 的最少硬币数,凑齐钱数amount最少的硬币数为 固定钱数coins[j] 的一枚硬币,其余钱数为 amount - coins[j],那么数量为dp[amount-conis[j]]。
代码如下:
1 class Solution {
2 public int coinChange(int[] coins, int amount) {
3 int[] dp = new int[amount + 1];
4 for (int i = 1; i <= amount; i++) dp[i] = 0x7fff_fffe;
5 for (int coin : coins)
6 for (int i = coin; i <= amount; i++)
7 dp[i] = Math.min(dp[i], dp[i - coin] + 1);
8 return dp[amount] == 0x7fff_fffe ? -1 : dp[amount];
9 }
10 }
END