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
|
class Solution {
public:
int res = INT_MAX;
void dfs(vector<int>& coins, int amount, int u, int cnt) {
if (u == coins.size()) {
if (!amount) {
res = min(res, cnt);
return;
}
return;
}
for (int i = amount / coins[u]; i >= 0; i --) {
if (cnt + i >= res) return;
dfs(coins, amount - i * coins[u], u + 1, cnt + i);
}
}
int coinChange(vector<int>& coins, int amount) {
sort(coins.begin(), coins.end(), greater<int>());
dfs(coins, amount, 0, 0);
if (res == INT_MAX) return -1;
return res;
}
};
|