Problem:
Analysis:
The analysis is the same as the Coin Change 1 (see previous post)
Code:
public int change1(int amount, int[] coins) {
int[][] f = new int[coins.length + 1][amount + 1];
f[coins.length][0] = 1;
for (int i=coins.length-1; i>=0; i--) {
for (int j=0; j<=amount; j++) {
for (int k=0; k<=j/coins[i]; k++) {
f[i][j] = f[i][j] + f[i+1][j - k*coins[i]];
}
}
}
return f[0][amount];
}
public int change2(int amount, int[] coins) {
int[][] f = new int[coins.length + 1][amount + 1];
f[coins.length][0] = 1;
for (int i=coins.length-1; i>=0; i--) {
for (int j=0; j<=amount; j++) {
if (j >= coins[i]) {
f[i][j] = f[i+1][j] + f[i][j-coins[i]];
}else{
f[i][j] = f[i+1][j];
}
}
}
return f[0][amount];
}
public int change3(int amount, int[] coins) {
int[] g = new int[amount + 1];
g[0] = 1;
for (int i=coins.length-1; i>=0; i--) {
for (int j=0; j<=amount; j++) {
if (j >= coins[i]) {
g[j] = g[j] + g[j-coins[i]];
}else{
g[j] = g[j];
}
}
}
return g[amount];
}