当前位置: 首页 > news >正文

【leetcode100】零钱兑换

1、题目描述

给你一个整数数组 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

2、初始思路

2.1 思路

本题的重点为初始化dp数组,dp数组初始化应为float('inf'),而不能初始化为0。

如果你一开始设置所有 dp[i] = 0,那意味着:对于所有金额 i,你都默认「不需要任何硬币就可以凑出来」,这显然不成立。

float('inf') 代表「当前还无法凑出这个金额」。之后通过不断更新(min(dp[j], dp[j - coin] + 1)),来尝试找到更优解(更少的硬币数量)。

唯一的例外是 dp[0] = 0,因为金额为 0 的时候,不需要任何硬币。

2.2 代码

class Solution:def coinChange(self, coins: List[int], amount: int) -> int:dp = [float('inf')] * (amount+1)dp[0] = 0for coin in coins:for j in range(coin, amount+1):dp[j] = min(dp[j],dp[j-coin] + 1)return dp[amount] if dp[amount] != float('inf') else -1

相关文章:

  • list底层原理
  • Python基础知识语法归纳总结(数据类型-2)
  • 调和平均数通俗易懂的解释以及为什么这样定义,有什么用
  • Git ——提交至github,Vercel拉取,更新不了项目的问题解决
  • redis数据类型-基数统计HyperLogLog
  • 典籍知识问答典籍查询界面前端界面设计效果实现
  • C# byte[]字节数组常用的一些操作。
  • 实战交易策略 篇十七:翻倍黑马交易策略
  • npm的基本使用安装所有包,安装删除指定版本的包,配置命名别名
  • 解决方案 | 晶尊微智能马桶着座感应模块
  • nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包
  • Git远程操作
  • Java MCP客户端SDK实现
  • Unity 带碰撞的粒子效果
  • Linux 系统监控进阶:htop 命令详解与高效运维
  • 已安装爱思助手和Apple相关驱动,但仍无法有线连接iPhone热点,且网络适配器没有Apple Mobile Device Ethernet,问题解决
  • 比特币三种扩容路径Nubit、Babylon、Bitlayer分析
  • java的反编译命令
  • 【Hive入门】Hive架构与组件深度解析:从核心组件到生态协同
  • 关于RPC
  • 国防部发布、中国军号及多家央媒官博发祝福海报:人民海军76岁生日快乐
  • “从山顶到海洋”科技成果科普巡展在重庆启动,免费开放
  • 西安雁塔区委书记王征拟任市领导班子副职,曾从浙江跨省调任陕西
  • 隽逸不凡——北京画院藏近代篆刻家金城花鸟画赏析
  • 最高法:抢票软件为用户提供不正当优势,构成不正当竞争
  • 2025年上海车展后天开幕,所有进境展品已完成通关手续