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