题目描述:
给你一个整数数组 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

思路1:
深搜,找到所有可能的方案,再取最小的,这里可以适当的剪枝,如从cions[i]最大的开始搜。 时间复杂度O(2^n)。
思路2:
动态规划——dp[i]拼到最少需要的数量
这道题类似与上台阶问题的思路,状态转移方程:
dp[i] = max{ dp[i-cions[j]] } +1, j : 是coins中所有值
即问题相当于倒数,比如示例1中可以是dp[6] + 1(再来一张5元), dp[9] + 1(再来一张2元), dp[10]+1(再来一张1元).

class Solution(object):def coinChange(self, coins, amount):""":type coins: List[int]:type amount: int:rtype: int"""# 状态dp是凑成i需要的硬币数量# 本题的状态定义和状态转移和爬楼梯问题很类似dp = [amount+1 for i in range(amount+1)]# 初始值的设置!!!dp[0] = 0for m in range(1, amount+1):for j in range(len(coins)):if m-coins[j] >= 0:dp[m] = min(dp[m-coins[j]], dp[m])dp[m] += 1if dp[amount] <= amount:return dp[amount]else: #拼不出来!!!return -1

这里需要注意初始值的设置来保证最后返回的结果是正确的,因为有拼不出来的情况。

leetcode 322: 零钱兑换相关推荐

  1. leetcode: 322.零钱兑换

    322.零钱兑换 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/coin-change/ 给你一个整数数组 coins ,表示不同面额的硬币:以及一 ...

  2. LeetCode 322. 零钱兑换(DP)

    文章目录 1. 题目信息 2. 解题 2.1 回溯穷举 2.2 动态规划 1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount. 编写一个函数来计算可以凑成总金额所需的最少的硬币 ...

  3. golang力扣leetcode 322.零钱兑换

    322.零钱兑换 322.零钱兑换 题解 代码 322.零钱兑换 322.零钱兑换 题解 //state: dp[i]金额为i时所需最少硬币个数 //function: dp[i]=dp[i-n]+1 ...

  4. Java实现 LeetCode 322 零钱兑换

    322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输 ...

  5. [LeetCode] 322.零钱兑换 五种方法讲解

    322.零钱兑换 五种方法讲解 文章目录 322.零钱兑换 五种方法讲解 1 问题描述 2 问题分析 3 解决策略 3.1 递归-暴力解决 3.2 递归-加入存储 3.3 BFS 3.4 动态规划-自 ...

  6. LeetCode 322. 零钱兑换

    322. 零钱兑换 难度 中等 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额. 计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组 ...

  7. Leetcode.322 零钱兑换

    索引iii表示 amountamountamount 金额,dp[i]dp[i]dp[i] 表示最少 coinscoinscoins 个数. 递归 class Solution {int res = ...

  8. Leetcode 322.零钱兑换

    Time: 20190906 Type: Medium 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币 ...

  9. leetcode 322. 零钱兑换 思考分析

    目录 1.题目 2.思路分析 3.参考链接 1.题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...

  10. 99. Leetcode 322. 零钱兑换 (动态规划-完全背包)

    步骤一.确定状态: 确定dp数组及下标含义 dp数组是个amout+1的数组,dp[j]表示的是装满容量为j的背包所需要的最 少物品的个数 步骤二.推断状态方程: 对于当前物品i, 有两种选择决定了d ...

最新文章

  1. 三次样条插值三弯矩matlab_三次样条(cubic spline)插值
  2. 哇赛!我是小龙女啊!
  3. Elasticsearch 技术分析(七): Elasticsearch 的性能优化
  4. jvm 参数_一文带你深入了解JVM内存模型与JVM参数详细配置
  5. nginx工作笔记004---配置https_ssl证书_视频服务器接口等
  6. c++ file* 句柄泄漏_C/C++连接MySql数据库使用总结
  7. 小白记事本--学不明白还怕忘记指针--loading未完待续
  8. JEECG框架自定义下拉框
  9. 短视频APP管理系统源码 直播系统源码
  10. 纯数学教程 Page 325 例LXVIII (4) 比值判别法和达朗贝尔判别法失效的一种情形...
  11. http301重定向IIS 301重定向域名转向新旧域名更替
  12. 名帖63 欧阳询 楷书《九成宫醴泉铭》
  13. 用Python 制作身高预测系统
  14. 网易云音乐评论墙php源码,网易云音乐热评墙那些令人感慨的句子,哪一句打动了你?...
  15. wl_15 Scanner使用
  16. 射频开关-RF Switch拆机
  17. 制作几个最简单的网页,需要学习HTML与CSS就好了,通过hbuilder写代码就好了,易迅达 精心推荐
  18. 使用element-tiptap后报错Duplicate use of selection JSON ID cell解决方法
  19. 牛客网“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)”错误的可能原因
  20. javascript 对象{‘key1’:‘value1‘,‘key2‘:‘value2‘} 转化为数组 [{‘key1‘:‘value1‘},{‘key2‘:‘name2‘}]

热门文章

  1. 流利说反编译抓包笔记
  2. 登陆页面登录成功之后的操作
  3. 成为华尔街金融巨鳄第四课:Matplotlib从入门到放弃
  4. Spring Security Oauth2 单点登录案例实现和执行流程剖析
  5. 【STM32CubeMx你不知道的那些事】第三章:STM32CubeMx串口配置(中断接收)
  6. 【android】音乐播放器之UI设计的点点滴滴
  7. 超全,Python 量化金融库汇总
  8. 2022的展望与规划
  9. 学生学python编程---实现贪吃蛇小游戏+源码
  10. 如何快速修改证件照片的背景颜色