077_兑换零钱
知识点:贪心、动态规划、完全背包
LeetCode第三百二十二题:https://leetcode-cn.com/problems/coin-change/submissions/
语言:GoLang
// 贪心算法, 双百
func coinChange(coins []int, amount int) int {
sort.Slice(coins, func(i, j int) bool {
return coins[i] > coins[j]
})
ans := math.MaxInt64
greedy(coins, amount, 0, 0, &ans)
if ans == math.MaxInt64 {
return -1
}
return ans
}
func greedy(coins []int, amount, count, index int, ans *int) {
if amount == 0 {
if *ans > count {
*ans = count
}
return
}
if index == len(coins) {
return
}
for k := amount / coins[index]; k >= 0 && count + k < *ans; k-- {
greedy(coins, amount - k * coins[index], count + k, index + 1, ans)
}
}
// 暴力解法dfs,超时。加个memo优化一下,时间也只有5%
var memo map[int]int
func coinChange_(coins []int, amount int) int {
sort.Sort(sort.Reverse(sort.IntSlice(coins)))
memo = map[int]int{}
dfs(coins, amount)
return memo[amount]
}
func dfs(coins []int, amount int) int {
if v, ok := memo[amount]; ok {
return v
}
if amount == 0 {
return 0
}
if amount < 0 {
return -1
}
memo[amount] = math.MaxInt64
for _, v := range coins {
count := dfs(coins, amount - v)
if count == -1 {
continue
}
if count + 1 < memo[amount] {
memo[amount] = count + 1
}
}
if memo[amount] == math.MaxInt64 {
memo[amount] = -1
}
return memo[amount]
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端