func coinChange(coins []int, amount int) int { dp := make([]int, amount+1) for i := 1; i <= amount; i++ { // dp[0] is 0 dp[i] = amount + 1 } for _, coin := range coins { for i := coin; i <= amount; i++ { dp[i] = minInt(dp[i], dp[i-coin]+1) } } if amount < dp[amount] { return -1 } return dp[amount] } func minInt(x, y int) int { if x < y { return x } return y }