给定不一样面额的硬币 coins 和一个总金额 amount。编写一个函数来计算能够凑成总金额所需的最少的硬币个数。若是没有任何一种硬币组合能组成总金额,返回 -1
。函数
示例 1:code
输入: coins = , amount = 输出: 解释: 11 = 5 + 5 + 1[1, 2, 5]113
示例 2:io
输入: coins = , amount = 输出: -1[2]3
说明:
你能够认为每种硬币的数量是无限的。class
class Solution { public: int coinChange(vector<int>& coins, int amount) { int Max = amount+1; // 最多硬币个数为amount个,最小金额为1 vector<int> dp(amount+1,Max); // 用Max初始化,dp[i]表示i元最少的硬币个数 dp[0]=0; int n = coins.size(); for(int i=1;i<=amount;i++) { for(int j=0;j<n;j++) { if(coins[j]<=i) dp[i] = min(dp[i],dp[i-coins[j]]+1); // dp方程 } } return dp[amount]>amount?-1:dp[amount]; } };