322. Coin Change

問題描述: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]; } };
相關文章
相關標籤/搜索