算法之钱币找零-01

博客讨论了如何用动态规划解决钱币找零问题,分析了贪心算法、回溯法以及多种动态规划解法的时间和空间复杂度,强调了总结的重要性。
摘要由CSDN通过智能技术生成

1.说点啥

总是算法,算法,算法,林林总总少说也有小两百道了,各种文章和书籍也看了一些。
看到钱币找零,还是一筹莫展。
得改变一下自己的学习思路和状态.

  1. 每刷一道题,要写出各种解法和时间空间复杂度。
  2. 一定要写总结,这个很重要!

2. 题目描述

这个问题在我们的日常生活中更加普遍。假设我们有 1 元、2 元、5 元、10 元、20 元、50 元、100 元这些面额的纸币,它们的张数分别是 c1、c2、c5、c10、c20、c50、c100。我们现在要用这些钱来支付 K 元,最少要用多少张纸币呢?

3. 总结

3.1 解题思路

  1. 贪心: 从面值最大的找,不够了依次往下。 局部解不是最优解,所以要枚举所有值才是真正的答案(也就是回溯法,穷举所有答案)
  2. 动态规划: 一张纸币最多达到多少金额,两张纸币最多达到做少金额,递归下去。。

3.2 总结

  1. 贪心不行。
  2. 回溯可以。
  3. 动态规划有一维数组和二维数组两种解法,一维数组有两种解法。
  4. 递归有递归和递归回忆录两种解法。
  5. 回溯和递归是一种解法,只不过一个是思想,一个是实现。
  6. 一共有六种解法,七种实现。
  7. 第七种实现,最优。

4. 解法

4.0 贪心算法

时间:指数级别。
空间:O(n)(递归的n次空间)

let coinChange = function (coins, amount, idxCoin = 0) {
    coins = coins.sort((a, b) => b - a) // 排序

    return _c(coins, amount, idxCoin)
}

let _c = function (arr, amount, count = 0) {
    if (a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值