You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1
.
Example 1:
coins = [1, 2, 5]
, amount = 11
return 3
(11 = 5 + 5 + 1)
Example 2:
coins = [2]
, amount = 3
return -1
.
本题是换零钱问题,返回最小的零钱数目
我们维护一个一维动态数组dp,其中dp[i]表示钱数为i时的最小硬币数的找零,递推式为:
dp[i] = min(dp[i], dp[i - coins[j]] + 1);
代码如下:class Solution { public int coinChange(int[] coins, int amount) { int dp[] = new int [amount+1]; dp[0] = 0; for (int i = 1; i<=amount; i++) { int min = Integer.MAX_VALUE; for (int j = 0; j < coins.length; j++) { if(coins[j]<=i&&dp[i - coins[j]] != -1) { min = Math.min(min,dp[i-coins[j]]+1); } } dp[i] = min == Integer.MAX_VALUE ? -1 : min; } if(dp[amount]== Integer.MAX_VALUE) { return -1; }else return dp[amount]; } }