问题描述:spa
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
.code
Example 1:blog
Input: coins = , amount = Output: Explanation: 11 = 5 + 5 + 1[1, 2, 5]113
Example 2:it
Input: coins = , amount = Output: -1 [2]3
Note:
You may assume that you have an infinite number of each kind of coin.io
解题思路:function
能够用dp来解class
dp[i]表明的是前数为i是可用来换的最少的硬币。sort
由于题目中会给定coin的面值,因此咱们须要对每一种面值进行尝试。di
由于我设定的初始值为-1, 因此我在更新dp时make
dp[i] = dp[i] == -1 ? dp[i-coins[j]]+1 : min(dp[i], dp[i-coins[j]]+1);
代码:
class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount+1, -1); sort(coins.begin(), coins.end()); dp[0] = 0; for(int i = 1; i <= amount; i++){ for(int j = 0; j < coins.size(); j++){ if(i - coins[j] > -1){ if(dp[i-coins[j]] != -1){ dp[i] = dp[i] == -1 ? dp[i-coins[j]]+1 : min(dp[i], dp[i-coins[j]]+1); } }else{ break; } } } return dp[amount]; } };