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:
Input: coins = [1, 2, 5], amount = 11 Output: 3 Explanation: 11 = 5 +
5 + 1 Example 2:Input: coins = [2], amount = 3 Output: -1
动态规划,44ms
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int len = coins.size();
if (amount == 0) {
return 0;
}
if (len == 0 ) {
return -1;
}
vector<int> dp(amount+1, INT_MAX);
dp[0] = 0;
for (int i = 1; i <= amount; ++i) {
for (int coin : coins) {
if (coin <= amount) {
dp[coin] = 1;
}
if (i- coin >=0&&dp[i - coin] < dp[i]-1 ) {
dp[i] = dp[i- coin] + 1;
}
}
}
return dp[amount] == INT_MAX ? -1: dp[amount];
}
};