Golang | Leetcode Golang题解之第322题零钱兑换

题目:

题解:

func coinChange(coins []int, amount int) int {
	var (
		dfs  func(x int) int     // x金额 最少硬币个数
		memo = make(map[int]int) // 记忆化
	)
	dfs = func(x int) int {
		//边界
		if x == 0 {
			return 0
		} else if x < 0 {
			return math.MaxInt32
		}

		//记忆化
		if _, ok := memo[x]; ok {
			return memo[x]
		}

		//状态转移
		var res = math.MaxInt32
		for _, y := range coins {
			res = min(res, 1+dfs(x-y))
		}
		memo[x] = res
		return res
	}

	ans := dfs(amount)
	if ans == math.MaxInt32 {
		return -1
	}
	return ans
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值