1234567891011121314151617181920212223242526272829303132333435 |
- 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
- }
|