LeetCode 322. 零錢兌換(C、C++)
阿新 • • 發佈:2018-11-25
給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1
。
示例 1:
輸入: coins =[1, 2, 5]
, amount =11
輸出:3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins =[2]
, amount =3
輸出: -1
說明:
你可以認為每種硬幣的數量是無限的。
C
int coinChange(int* coins, int coinsSize, int amount) { int n=coinsSize; int* tmp=(int*)malloc(sizeof(int)*(amount+1)); for(int i=0;i<=amount;i++) { tmp[i]=amount+1; } tmp[0]=0; for(int i=1;i<=amount;i++) { for(int j=0;j<n;j++) { if(coins[j]<=i) { int cc=tmp[i-coins[j]]+1; tmp[i]=tmp[i]<cc?tmp[i]:cc; } } } if(tmp[amount]==amount+1) { return -1; } else { return tmp[amount]; } }
C++
class Solution { public: int coinChange(vector<int>& coins, int amount) { int n=coins.size(); vector<int> tmp(amount+1,amount+1); tmp[0]=0; for(int i=1;i<=amount;i++) { for(int j=0;j<n;j++) { if(coins[j]<=i) { tmp[i]=min(tmp[i],tmp[i-coins[j]]+1); } } } if(tmp[amount]==amount+1) { return -1; } else { return tmp[amount]; } } };