[Day13]-[动态规划]- 零钱兑换
322. 零钱兑换
难度中等 1869 收藏分享切换为英文接收动态反馈
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
示例 1:
复制代码
示例 2:
复制代码
示例 3:
复制代码
题解
复制代码
本文字数:499 字
阅读完需:约 2 分钟
难度中等 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,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

促进软件开发及相关领域知识与创新的传播
ArchSummit全球架构师峰会 3月24-25日
PCon全球产品创新大会 3月25-26日
DIVE全球基础软件创新大会 3月25-26日
ArchSummit全球架构师峰会 4月24-25日
QCon全球软件开发大会 5月12-14日
GMTC全球大前端技术大会 6月10-11日
ArchSummit全球架构师峰会 7月15-16日
PCon全球产品创新大会 8月19-20日
京公网安备 11010502039052号

评论