写点什么

[Day13]-[动态规划]- 零钱兑换

作者:方勇(gopher)
  • 2022 年 4 月 11 日
  • 本文字数:499 字

    阅读完需:约 2 分钟

322. 零钱兑换

难度中等 1869 收藏分享切换为英文接收动态反馈

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

 

示例 1:

输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1
复制代码

示例 2:

输入:coins = [2], amount = 3输出:-1
复制代码

示例 3:

输入:coins = [1], amount = 0输出:0
复制代码

题解

func coinChange(coins []int, amount int) int {	memo := map[int]float64{}	var dp func(int) float64	dp = func(n int) float64 {		if _, ok := memo[n]; ok {			return memo[n]		}		if n == 0 {			return 0		}		if n < 0 {			return -1		}		res := math.MaxFloat64		for _, coin := range coins {			subProblem := dp(n - coin)			if subProblem == -1 {				continue			}			res = math.Min(res, subProblem+1)		}
if res == math.MaxFloat64 { memo[n] = -1 } else { memo[n] = res } // t.Log(memo) return memo[n] }
return int(dp(amount))}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day13]-[动态规划]-零钱兑换_LeetCode_方勇(gopher)_InfoQ写作平台