問題描述: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]; } };