动态规划 Leetcode 322 Coin Change(零钱兑换)

2023-11-14

题目

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

链接(中文版):https://leetcode-cn.com/problems/coin-change

链接(英文版):https://leetcode.com/problems/coin-change

分析

用动态规划解题就是求出递推公式,对于本题,想求总金额为amount的答案(记为Answer(amount)),需要使用总金额小于amount的答案,即递推。

对某个硬币(记面额为coin),如果小于等于amount,则说明这个硬币可以组成amount,此时有两个答案:

使用该硬币的答案Answer(amount-coin)+1,其中Answer(amount-coin)是总金额为amount-coin(小于amount)的答案,+1表示使用coin这个硬币,所以硬币数量加1。

不使用该硬币的答案Answer(amount),即当前已有答案。初始化时,我们要把这个初始答案设为一个很大的数字,这里用amlount+1就行,因为最小的面额是1,如果最后Answer(amount)==amount+1,说明给定的硬币没法组成amount。

对于这两个答案,我们取较小的,赋给Answer(amount),然后继续判断其他的硬币,当全部硬币都处理完,就得到最优的Answer(amount)

代码

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        results = [amount + 1] * (amount + 1) #初始化全部答案为amount+1
        results[0] = 0 #第0个答案是0,循环从1开始
        for i in range(1, amount + 1): #依次计算1到amount的最优答案。这里是amount+1,因为range是左开右闭的
            for coin in coins: #每个最优答案的求取,都需要遍历全部的硬币
                if i >= coin: #如果某个硬币小于i,说明它可以是组成i的一部分
                    results[i] = min(results[i], results[i-coin] + 1) #是否使用这个硬币,取决于两个答案的大小
        # print(results) #至此,从1到amount的全部最优答案都有了
        return results[-1] if results[-1] <= amount else -1 #返回最有一个答案,即所求答案,如果它没有被更新过,说明它无法被组成,返回-1

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态规划 Leetcode 322 Coin Change(零钱兑换) 的相关文章

  • 从数据框中按索引删除行

    我有一个数组wrong indexes train其中包含我想从数据框中删除的索引列表 0 63 151 469 1008 要删除这些索引 我正在尝试这样做 df train drop wrong indexes train 但是 代码失败
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • 找不到MSVCR120.dll

    问题 在windos平台启动Mysql5 7时提示 找不到MSVCR120 dll 无法执行代码 处理 安装对应的dll动态库程序 安装程序下载地址下载地址
  • DA转换原理及实现

    这一篇介绍D A转换原理以及在TX 1C上的接线方式 实现方法 再用一个例子来加深理解 D A转换原理及参数指标 1 基本原理 数字量是二进制代码数位组合而来的 每位都有一定的权重 在D A转换中 怎么样把这些权重以合适的方法表示出来是转换
  • 在ubuntu里面安装交叉编译工具(树莓派的)

    交叉编译是什么 为什么要交叉编译 交叉编译 是在一个平台上生成另一个平台上的可执行代码 我们再windows上面编写C51代码 并编译成可执行代码 如xx hex 是在c51上面运行 不是在windows上面运行我们在ubuntu上面编写树
  • ZYNQ图像处理项目——帧差法运动目标跟踪

    一 帧差法运动目标跟踪概述 1 1 基本原理 帧差法顾名思义就是对输入的前后两帧图像做差值 然后检测出两帧图像不同的地方 并且可以实时跟踪运动的目标轮廓 本设计是基于ZYNQ7010和VIVADO2018 3实现的帧差法运动目标检测 针对运
  • Flutter 30: 图解自定义底部状态栏 ACEBottomNavigationBar (一) ...

    小菜刚接触 Flutter 时接触到底部状态栏 BottomNavigationBar 方便快捷 但随着使用过程发现依然有一些限制 包括图片选择 样式凸出 固定 NavigationItem 位等 小菜不才 准备照葫芦画瓢 自定义一个底部状
  • PowerDesigner链接Oracle导出数据模型,并且显示中文注释

    1 首先新建模型 选择物理数据模型 2 对新建模型命名 选择对应的数据库版本 3 选中新建的模型图 选择从数据库更新模型 4 选择使用数据源 5 新建数据源 如果在当前页面无法选择系统数据源 说明当前软件不是在管理员模式下运行的 退出 重新
  • dataframe列时间字段提取年、月、日、时、分

    dataframe列的 日期时间 进行提取对应的年月日时分 import pandas as pd df pd read csv file encoding utf 8 sig dateframe 日期数据 字符型转换成日期格式 df 日期
  • 日语学习之——拗音

    前言 本文主要介绍日语学习中的拗音 拗音的拼写及发音准则 拗音 33个 发音原则 段假名 小写 一 行 1 1 行 kya 第1行 元音行 段 段 段 行 kya kyu kyo 1 2 相关单词 假名 日本汉字 中文意思 外来语 取消 和
  • int *const p和 int const *p 的区别

    1 对于int const p const 限定的是p所指的对象 所以p指针所指的地址在这个情况下是不能改变的 2 对于 int const p const限定的是 p 所以 p所指的值是不可以改变的 但是可以改变p所指的对象 3 更多的列
  • buuctf-[极客大挑战 2019]LoveSQL1(小宇特详解)

    buuctf 极客大挑战 2019 LoveSQL1 小宇特详解 1 这里有账号和密码 这里先尝试一下万能密码 在账号那里注入 1 or 1 1 密码随便 这里继续进行注入 判断有几列 1 order by 3 这里试一试4 1 order
  • 马氏距离例题详解(全网最详细)

    马氏距离例题详解 定义 马哈拉诺比斯距离是由印度统计学家马哈拉诺比斯 英语 提出的 表示数据的协方差距离 它是一种有效的计算两个未知样本集的相似度的方法 与欧氏距离不同的是它考虑到各种特性之间的联系 例如 一条关于身高的信息会带来一条关于体
  • 云安全威胁和责任

    云计算的共享特性和按需定制本质除了给企业带来效率上提升 也引入了新的安全威胁 有可能使企业得不偿失 之前云安全联盟 CSA 的报告便指出 云服务天生就能使用户绕过公司范围内的安全策略 建立起自己的影子IT项目服务账户 新的安全控制策略必须被
  • 访问者模式(Visitor)

    设计模式系列 Visitor 访问者模式 对象行为模式 1 意图 表示一个作用于某对象结构中的各元素的操作 它使你可以在不改变各元素的类的前拐下定义作用于这些元素的新操作 2 适用性 在下列情况下使用Visitor模式 一个对象结构包含很多
  • 数字水印技术:概念、应用及现状

    出处 伯晓晨 沈林成 常文森 一 引言 随着信息时代的到来 特别是Internet的普及 信息的安全保护问题日益 突出 当前的信息安全技术基本上都以密码学理论为基础 无论是采用传统的密钥系统 还是公钥系统 其保护方式都是控制文件的存取 即将
  • java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded(...

    1 错误信息 java lang NoSuchMethodError org apache curator framework api CreateBuilder creatingParentsIfNeeded Lorg apache cu
  • shell无限死循环

    学习shell脚本 练习脚本时 每次测试脚本都需要重新打开文件 为了方便就想到了死循环 想到shell脚本是基于C语言和C 编写的 顺着想法试了一通C循环方法 没对一个 经过网上大佬们的文章学习 学习到了while循环和for循环 记录一下
  • 九、基本数据类型-浮点类型

    如果 我们 创建了 一个浮点类型的变量 那么 这个变量 就可以用来 存储 浮点类型的数据 也就是 含有小数数位的数据 如果 一个数字 含有 小数点 以及 后面的数位 那么 这个数字 就属于 浮点类型 如果 小数点前面 或者 后面的数位 是
  • Java8对list排序(正序倒序)

    话不多说直接上干货 这里我写了一个list数组里边add了三个Order实体 我的ucId price qty都是int类型 第一个实例 我对price进行从小到大的排序 我的price是int类型 显然这里的第一种方式已经给出提示了 让使
  • Matlab实现Bi-Kmeans算法(每行代码标注详细注解)

    逐行代码讲解Bi Kmeans算法的原理及其实现 后续将更新该算法的进一步优化的代码的讲解 目录 一 什么是Kmeans 算法 二 bi kmeans算法原理 三 bi kmeans算法代码解析 四 总结 一 什么是Kmeans 算法 K
  • 动态规划 Leetcode 322 Coin Change(零钱兑换)

    题目 给定不同面额的硬币 coins 和一个总金额 amount 编写一个函数来计算可以凑成总金额所需的最少的硬币个数 如果没有任何一种硬币组合能组成总金额 返回 1 链接 中文版 https leetcode cn com problem