给定不同面额的硬币 coins 和一个总金额
amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:
输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2:
输入: coins = [2], amount = 3 输出: -1
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int coinChange(int* coins, int coinsSize, int amount){
int dp[amount + 1];
memset(dp, 0, sizeof(int) * (amount + 1));
for(int i = 1; i <= amount; ++i){
int min = INT_MAX;
for(int j = 0; j < coinsSize; ++j){
int k = i - coins[j];
if(k >= 0 && dp[k] != -1 && dp[k] + 1 < min)
min = dp[k] + 1;
}
if(min != INT_MAX) dp[i] = min;
else dp[i] = -1;
}
return dp[amount];
}