news 2026/7/11 23:52:34

力扣打卡每日一题————零钱兑换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣打卡每日一题————零钱兑换

零钱兑换问题

一、问题描述

题目要求

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

示例

  • 输入:coins = [1,2,5], amount = 11

  • 输出:3(解释:11 = 5 + 5 + 1,最少需要 3 枚硬币)

  • 输入:coins = [2], amount = 3

  • 输出:-1(解释:无法用面额 2 的硬币凑出 3)

核心难点

  1. 需找到 “最少硬币数”,而非所有组合数;
  2. 需处理 “无法凑出金额” 的边界情况;
  3. 避免数组越界、数值溢出等编码错误。

二、解题思路:动态规划(DP)

1. 状态定义

定义dp[i]表示:凑成总金额i所需的最少硬币数量

2. 初始化

  • 基准条件:dp[0] = 0,因为凑 0 元不需要任何硬币。
  • 其他状态:初始化dp[i] = amount + 1amount+1是一个 “大于最大可能值” 的数,代表 “初始不可达”。最大可能值是amount(全用 1 元硬币),因此amount+1可标记为 “未更新”。

3. 状态转移

对于每个金额i(从 1 到amount),遍历所有硬币面额coin

  • coin <= i(当前硬币面额不超过目标金额),则:dp[i] = min(dp[i], dp[i - coin] + 1)
  • 解释:dp[i - coin]是凑出i - coin元的最少硬币数,加 1 枚当前硬币即可凑出i元,取所有可能中的最小值。

4. 结果判断

  • dp[amount] > amount:说明始终未更新,无法凑出金额,返回-1
  • 否则:返回dp[amount](最少硬币数)。

三、完整代码实现

class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount + 1, amount + 1); dp[0] = 0; for (int i = 1; i <= amount; ++i) { for (int j = 0; j < coins.size(); ++j) { if (coins[j] <= i) { dp[i] = min(dp[i], dp[i - coins[j]] + 1); } } } return dp[amount] > amount ? -1 : dp[amount]; } };

四、复杂度分析

  • 时间复杂度O(amount * len(coins))外层循环遍历amount个金额,内层循环遍历所有硬币,总次数为两者乘积。
  • 空间复杂度O(amount)仅需维护一个大小为amount + 1的 dp 数组,属于线性空间。

五、总结

问题的核心是动态规划的状态转移思想:将 “凑金额 i” 的大问题,拆解为 “凑金额 i-coin” 的小问题

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 1:53:17

RevancedXposed终极指南:从零开始的完整配置教程

RevancedXposed是一款功能强大的Xposed模块&#xff0c;专门针对YouTube和YouTube Music应用进行优化&#xff0c;提供广告拦截、后台播放等实用功能。本文将为新手用户和开发者提供完整的安装配置指南&#xff0c;帮助您快速上手使用这一优秀工具。 【免费下载链接】RevancedX…

作者头像 李华
网站建设 2026/7/10 13:29:13

终极创意工具箱:3D模型与图片资源的完美整合方案

还在为寻找高质量的3D模型和图片素材而烦恼吗&#xff1f;search-photos-by-model-tool项目为你提供了一个完整的解决方案&#xff0c;将Flickr的CC许可图片资源与3D模型管理功能巧妙融合&#xff0c;打造出一个创意工作者的专属工具箱。 【免费下载链接】search-photos-by-mod…

作者头像 李华
网站建设 2026/7/11 11:27:36

VancedManager智能后台任务调度:实现极致电池续航的技术解析

VancedManager智能后台任务调度&#xff1a;实现极致电池续航的技术解析 【免费下载链接】VancedManager Vanced Installer 项目地址: https://gitcode.com/gh_mirrors/va/VancedManager 你是否曾经遇到过这样的情况&#xff1a;手机明明没有怎么使用&#xff0c;但电池…

作者头像 李华
网站建设 2026/7/11 23:01:21

LiteDB.Studio:轻量级NoSQL数据库的可视化管理利器

LiteDB.Studio&#xff1a;轻量级NoSQL数据库的可视化管理利器 【免费下载链接】LiteDB.Studio资源文件下载 LiteDB.Studio 是一个用于查看和编辑 LiteDB v5 文档的图形用户界面&#xff08;GUI&#xff09;工具。它为用户提供了一个直观的方式来管理和操作 LiteDB 数据库&…

作者头像 李华
网站建设 2026/7/11 23:08:28

腾讯HunyuanImage-2.1:24GB显存驱动2K高清AI绘图技术深度解析

腾讯HunyuanImage-2.1&#xff1a;24GB显存驱动2K高清AI绘图技术深度解析 【免费下载链接】HunyuanImage-2.1 腾讯HunyuanImage-2.1是高效开源文本生成图像模型&#xff0c;支持2K超高清分辨率&#xff0c;采用双文本编码器提升图文对齐与多语言渲染&#xff0c;170亿参数扩散 …

作者头像 李华
网站建设 2026/7/11 7:44:47

【JavaWeb】Servlet_url-pattern的一些特殊写法问题

目录精确匹配模糊匹配精确匹配 编写Servlet 编辑web.xml 运行代码 一个servlet-name 可以同时对应多个不同的url-pattern 但是每个url-pattern只能对应一个servlet-name一个servlet 标签可以同时对应多个servlet-mapping标签模糊匹配 *作为通配符&#xff0c;*在哪里&#x…

作者头像 李华