1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Solution { public: int ans = INT_MAX; void dfs( vector<int>& coins, int amount,int index,int cnt) { if (index < 0) { return; } for (int c = amount / coins[index]; c >= 0; c--) { int na = amount - c * coins[index]; int ncnt = cnt + c; if (na == 0) { ans = ncnt < ans ? ncnt : ans; break; } if (ncnt + 1 >= ans) { break; } dfs(coins, na, index - 1, ncnt); } } int coinChange(vector<int>& coins, int amount) { sort(coins.begin(), coins.end());
dfs( coins, amount, coins.size() - 1,0); if (ans == INT_MAX) { return -1; } return ans; } };
|