|
@@ -0,0 +1,35 @@
|
|
|
+func change(amount int, coins []int) int {
|
|
|
+ dp := make([]int, amount+1)
|
|
|
+ dp[0] = 1
|
|
|
+ for _, c := range coins { // dp[i+c] += dp[i]
|
|
|
+ for i := 0; i <= amount-c; i++ {
|
|
|
+ dp[i+c] += dp[i]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dp[amount]
|
|
|
+}
|
|
|
+
|
|
|
+type pair struct {
|
|
|
+ _1 int
|
|
|
+ _2 int
|
|
|
+}
|
|
|
+
|
|
|
+func changeDFS(amount int, coins []int) int { // Memory search
|
|
|
+ m := make(map[pair]int)
|
|
|
+ return dfs(amount, coins, 0, m)
|
|
|
+}
|
|
|
+
|
|
|
+func dfs(amount int, coins []int, i int, m map[pair]int) (sum int) {
|
|
|
+ if amount == 0 {
|
|
|
+ return 1
|
|
|
+ } else if len(coins) == i {
|
|
|
+ return 0
|
|
|
+ } else if val, ok := m[pair{amount, i}]; ok {
|
|
|
+ return val
|
|
|
+ }
|
|
|
+ for c := 0; c <= amount; c += coins[i] {
|
|
|
+ sum += dfs(amount-c, coins, i+1, m)
|
|
|
+ }
|
|
|
+ m[pair{amount, i}] = sum
|
|
|
+ return
|
|
|
+}
|