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]; } };
相关文章
相关标签/搜索