funcdp(coins []int, amount int, cache map[int]int)int { if n, ok := cache[amount]; ok { return n } if amount == 0 { return0 } if amount < 0 { return-1 } res := math.MaxInt8 for _, coin := range coins { sub := dp(coins, amount-coin, cache) if sub == -1 { continue } res = min(res, 1+sub) } if res != math.MaxInt8 { cache[amount] = res } else { cache[amount] = -1 } return cache[amount] }
funcmin(a, b int)int { if a < b { return a } return b }