class Solution {
public:
int coinChange(vector<int>& coins, int amount)
{
vector<int> dp(amount+1,amount+1);//初始化为amount+1个amount+1.使得凑成金币i的硬币数为amount+1
//递推,兑换i元所需要的最少的硬币个数,有的没有组合的,不更改这些。
dp[0]=0;//金额为零,需要零个硬币
sort(coins.begin(),coins.end());//注意排序
for(int i=1;i<=amount;i++)
{
for(int j=0;j<coins.size()&&coins[j]<=i;j++) //coins[j]小于等于目标金额
{
dp[i]=min(dp[i],dp[i-coins[j]]+1);
}
}
if(dp[amount]==amount+1)
{
return -1;
}
return dp[amount];
}
};