func change(amount int, coins []int) int {
n := len(coins)
f := make([][]int, amount + 1)
for i := 0; i <= amount; i ++ {
f[i] = make([]int, n + 1)
}
for i := 0; i <= n; i ++ {
f[0][i] = 1
}
for i := 1; i <= amount; i ++ {
for j := 1; j <= n; j ++ {
f[i][j] = f[i][j - 1]
for k := 1; k*coins[j - 1] <= i; k ++ {
f[i][j] += f[i - k * coins[j - 1]][j - 1]
}
}
}
return f[amount][n]
}
优化:
func change(amount int, coins []int) int {
n := len(coins)
f := make([]int, amount + 1)
f[0] = 1
for j := 1; j <= n; j ++ {
for i := coins[j - 1]; i <= amount; i ++ {
f[i] += f[i - coins[j - 1]]
}
}
return f[amount]
}