步骤一、确定状态:

确定dp数组及下标含义

dp数组是个amout+1的数组,dp[j]表示的是装满容量为j的背包所需要的最 少物品的个数

步骤二、推断状态方程:

对于当前物品i, 有两种选择决定了dp[j]的推导方向:
1、选择当前物品i: 那么dp[j] = dp[j-nums[i]], 因为在j-nums[i]的基础 上加上1个nums[i]就是容量j了
2、不选择当前物品i, 那么还是保留原来的最少物品个数这里面要选择最小的 dp[j] = min(dp[j], dp[j-nums[i]]+1)

步骤三、规定初始条件:

初始条件:

这个题由于是每次选最小值,所以全局初始化的时候, 初始成最大值了。 而dp[0]=0,没 有容量没法装。

步骤四、计算顺序:

对于物品, 依然是正向遍历,而对于背包,也是正向遍历,因为这里的物品 可以取多次

class Solution:def coinChange(self, coins: List[int], amount: int) -> int:if amount == 0:return 0# dp[i]:凑成金额i的硬币所需要的最少的硬币个数dp = [float("inf") for _ in range(amount + 1)]dp[0] = 0 # 初始化for i in range(len(coins)): # 遍历物品for j in range(coins[i], amount+1): # 遍历背包容量dp[j] = min(dp[j], dp[j-coins[i]] + 1)return dp[-1] if dp[-1] != float('inf') else -1

99. Leetcode 322. 零钱兑换 (动态规划-完全背包)相关推荐

  1. LeetCode 322. 零钱兑换(动态规划)

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

  2. LeetCode 322. 零钱兑换

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

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

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

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

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

  5. leetcode: 322.零钱兑换

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

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

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

  7. Java实现 LeetCode 322 零钱兑换

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

  8. LeetCode 322. 零钱兑换 完全背包

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

  9. Leetcode.322 零钱兑换

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

最新文章

  1. 2022-2028年中国工业节能行业深度调研及投资前景预测报告
  2. A Complete List of .NET Open Source Developer Projects
  3. httpsendrequest的head怎么用string写_商品广告语用怎么写?男人篇
  4. c++采集声卡输出_其实声卡不单单只有音效,更多功能看这篇就对了
  5. 修改Jmeter中乱码问题
  6. Extra Credits: Project Ten Dollar 10
  7. 学习笔记(01):2019软考网络工程师--基础知识视频教程-数据通信基础(一)
  8. 信息安全必备的8张思维导图
  9. CDR安装包下载+汉化简体中文版+安装教程
  10. php获取谷歌邮箱,php 获取gmail 联系人邮箱,应用oauth2.0验证
  11. 云南 贵州大旱灾情百年一遇 经济损失惨重
  12. 社群怎么建立,怎么做好社群营销?
  13. 【基于python+Django的博客系统-哔哩哔哩】 https://b23.tv/bmRfAMu
  14. Redis——Redis事务性原理
  15. 查询 MySQL 字段注释的 5 种方法
  16. 新华三杯复赛实验赛题解析路由选路部署+PBR
  17. appium - X5内核应用
  18. System.Drawing.Color的颜色对照表
  19. ANDROID以流形式上传文件
  20. python sqrt函数的使用

热门文章

  1. 记一次validator jar冲突导致的启动异常
  2. 【提高系列】webpack相关知识
  3. 使用IsLine FrameWork开发ASP.NET程序之六—使用ExceptionProcessProvider异常处理框架(下)...
  4. https加密解密过程详解
  5. 微信公众平台向特定用户推送消息
  6. windows 2008 server R2 版本概览
  7. Android中代码运行指定的Apk
  8. 你真的明确知道它们的用法吗-从基础学起
  9. UML建模之时序图(Sequence Diagram)
  10. 新闻与传播c刊_新闻传播类c刊有哪些