1、递归
public static int makeChange(ArrayList<Integer> coins, int target){
return total(coins, target,0);
}
public static int total(ArrayList<Integer> coins,int target, int i) {
if( target < 0){
return 0;
}
if( target == 0){
return 1;
}
if (coins.size() == 0){
return 0;
}
if (i == coins.size() && target > 0) {
return 0;
}
return total(coins,target - coins.get(i), i) + total(coins,target, i + 1);
}
2、循环
public static int change(int amount, int[] coins) {
int[] dp = new int[amount + 1];
dp[0] = 1;
for (int coin : coins) {
for (int x = coin; x < amount + 1; ++x) {
dp[x] += dp[x - coin];
}
}
return dp[amount];
}