public int coinChange(int[] coins, int amount) {
if (amount==0) return 0;
// DFS
List<Integer> resList = new ArrayList<>();
for (int i=0; i<coins.length; i++) {
dfs(amount-coins[i], coins, 1, resList);
}
if (resList.size()==0) return -1;
int res=resList.get(0);
for (int i=1; i<resList.size(); i++) {
res = Math.min(resList.get(i), res);
}
return res;
}
// 解法一:DFS
private void dfs(int amount, int[] coins, int oneRes, List<Integer> resList) {
if (amount<=0) {
if (0==amount) {
resList.add(oneRes);
}
return;
}
for (int i=0; i<coins.length; i++) {
dfs(amount-coins[i], coins, oneRes+1, resList);
}
}
1.2 解法二:递归,DFS,时间超限制
public int coinChange(int[] coins, int amount) {
// DFS
return dfs(amount, coins, 0);
}
// 解法一:DFS
private int dfs(int amount, int[] coins, int oneRes) {
if (amount<=0) {
if (0==amount) {
return oneRe