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

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

零钱兑换问题

一、问题描述

题目要求

给定不同面额的硬币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” 的小问题

http://www.jsqmd.com/news/82285/

相关文章:

  • M+字体完全指南:免费开源的多语言字体解决方案
  • 解锁移动端语音合成新境界:5步构建轻量级TTS系统
  • 26、Python包管理与Egg创建全攻略
  • 如何用BetterTouchTool打造个性化Touch Bar体验:从预设到自定义
  • 2025年12月伺服压机品牌推荐排行榜:性能对比与行业应用深度评测 - 十大品牌推荐
  • 2025年10年Vue方向前端复习技术要点(2)
  • “医疗专业应用+分布式数据底座”:平凯数据库与金唐软件全链路赋能医疗国产化与数字化转型
  • ANTLR4 C++终极指南:深度解析语法解析实战技巧
  • 掌握Python数据分析核心技能:从数据洞察到业务决策的完整指南
  • 语音合成新突破:VoxCPM开源模型实现实时高拟真语音克隆
  • RevancedXposed终极指南:从零开始的完整配置教程
  • 2025效率革命:Qwen3-8B-MLX-8bit双模式切换重塑边缘AI部署范式
  • Penlight:Lua开发者的全能工具箱终极指南
  • 深入解析GloVe词向量:从语义理解到实战应用
  • 全连接神经网络与多层感知机:从零开始的完整指南
  • 2025年顺威联技术创新权威盘点:市场表现与用户口碑深度评析 - 十大品牌推荐
  • 日常篇:程序设计实验报告——异或加密,凯撒密码(不是完整代码)
  • SkyReels-V1 完整安装指南:从零开始构建先进视频生成模型
  • 基于springboot + vue健身房管理系统
  • 2025年12月米粉机厂家综合实力评测推荐榜:深度对比分析与选购决策指南 - 十大品牌推荐
  • ggplot2终极指南:快速掌握数据可视化的完整安装配置方法
  • pako测试终极指南:构建可靠的JavaScript压缩验证体系
  • 2025年年终留学科研机构推荐:从科研产出到录取结果的全链路价值评估,附5家优质服务商选购指南 - 十大品牌推荐
  • 好用的成都科吉莱门窗断桥推拉窗服务商哪家靠谱些
  • 企业级浏览器自动化成本优化策略:从基础设施到运营效率的全面升级
  • 基于springboot + vue在线奶茶售卖系统
  • 计算机毕业设计|基于springboot + vue咖啡商城系统(源码+数据库+文档)
  • 2025年12月无人机吊运公司推荐:专业服务商综合实力排行榜单深度分析 - 十大品牌推荐
  • 降本增效管理干货:双卧轴混凝土搅拌机核心部件维护技术手册!
  • 2025旅游景区创A认证咨询公司TOP5权威推荐:标准化服务 - 工业品牌热点