稀碎从零算法笔记Day28-LeetCode:零钱兑换

前言:鸽了好多天了哈哈哈,虽然C站没更但是LC还是坚持刷的,任重道远啊!(可恶的寝室熄灯)

题型:动态规划

链接:322. 零钱兑换 - 力扣(LeetCode)

来源:LeetCode

题目描述

这道题贪心做不了(例子很简单,思路讲)

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

提示:

  • 1 <= coins.length <= 12
  • 1 <= coins[i] <= 231 - 1
  • 0 <= amount <= 104

题目思路

讲一下贪心为什么不可以:其实很简单,举个反例就行——用【10,8,7】来凑出16,当取了10之后直接就结束了

重新审题:①最少数目金币 ②无限金币个数  感觉可以从背包问题(完全背包)下手

那么开始构建dp数组:dp[i]的含义:凑齐 i 元需要用到的金币数——那就需要dp[amount+1],因为我们需要遍历到dp[amount]这个位置嘛

明白这一点,就可以思考递归式:在让dp[0] = 0(0元,不需要coin)的条件下,让 i 从 1开始遍历到amount,恰好有i == coins[j]的话,就可以将dp[i] 更新为dp[i-coins[j] + 1],表明这么些个数的硬币可以凑出来 i 元。

基本差不多了,这时候思考一下给dp[index]中的元素赋初值了:因为是要求最少金币数,那每次更新dp[index]时,就要 min(dp[i],dp[i-coins[i]] + 1) —— i - coins[i]上一段提到过,主要看会不会发生“恰好凑齐这种情况”。为了便于min后能更新dp数组,需要给dp数组初始化为一个【不可能超越的值】这边笔者直接给两种思路: ① 初始化为INX_MAX(但考虑到 +1 后会越界 int ,因此可以初始化为INT_MAX - 1 , 这样最后的时候看一下dp[amount]是否是“INT_MAX-1”即可)
②的思路就是都初始化为【amount +1】——coins最小为 1 ,表示amount最多用到 【amount】个coin,所以当初始化为【amount+1】时,就不需要跟①一样考虑越界的问题了

C++代码

class Solution {
public:int coinChange(vector<int>& coins, int amount) {//dp,不能贪心//  dp[9]:index为 0-8,表示凑成index所需要用到的金币数// 因为求最少,所以dp[index]要存的时minint len = coins.size();// INT_MAX + 1 会越界,所以耍小聪明就 INT_MAX-1vector<int> dp(amount+1,INT_MAX-1);dp[0] = 0;//凑成0元 需要0个coinfor(int i=0;i<len;i++){for(int j=1;j<amount+1;j++){// j表示要凑的钱if(j >= coins[i]){//如果j刚好等于coins[i],那么dp[j - coins[i]] = dp[0],就可以更新dp[j]的值dp[j] = min(dp[j],dp[j - coins[i]] + 1);}}}// 如过dp[amount]的值没变,说明凑不齐amount金额的硬币return dp[amount] == INT_MAX-1 ? -1 : dp[amount];}
};

结算页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

紫鸾5.0:紫光云新一代敏捷应用开发平台全家桶

曾几何时&#xff0c;“瀑布式”占据了二十世纪软件开发的主流&#xff0c;开发时间往往以年计&#xff0c;一款软件应用动辄几年才能交付。而随着社会生产力的跃升&#xff0c;“瀑布式”已严重跟不上时代的节奏&#xff0c;2001年&#xff0c;“敏捷宣言”的发布&#xff0c;…

微信小程序使用Vant组件库流程

目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。这样开发原生微信小程序的会方便很多。 官方网址&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 步骤一 通过 npm 安装 npm i vant/weap…

Matplotlib库的初步理解与使用

matplotlib库的设计哲学&#xff1a; Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard things possible. matplotlib是一个用来创建静态&#xff0c;动画&#…

蓝牙信标覆盖范围

蓝牙信标覆盖范围是一个重要的考虑因素&#xff0c;对于蓝牙技术的应用和部署至关重要。了解蓝牙信标的覆盖范围可以帮助我们更好地规划蓝牙设备的布局和位置&#xff0c;从而实现最佳的信号覆盖和传输效果。 首先&#xff0c;我们需要明确蓝牙信标的覆盖范围受到多种因素的影…

10 天 996 写出的语言 - JavaScript

本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 10 天 996 写出的语言 - JavaScript 在 JavaScript 之前&#xff0c;网页主要是静态的&#xff0c;任何交互性都必须在服务器端处理&#xff0c;导致用户体验笨拙和缓慢。JavaScript 的…

C语言与sqlite3入门

c语言与sqlite3入门 1 sqlite3数据类型2 sqlite3指令3 sqlite3的sql语法3.1 创建表create3.2 删除表drop3.3 插入数据insert into3.4 查询select from3.5 where子句3.6 修改数据update3.7 删除数据delete3.8 排序Order By3.9 分组GROUP BY3.10 约束 4 c语言执行sqlite34.1 下载…

Web UI 自动化测试方案(超级干货)看完不会你找我

项目讨论 一、项目中符合自动化测试的部分有哪些&#xff1f;(目标和范围 scope&#xff0c; 准入准出标准) 1、稳定的需求点、变动较少的页面 2、每日构建后的测试验证 daily build 3、比较频繁的回归测试 4、需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重…

what is apache?

Apache 通常指 Apache Software Foundation (ASF) 或 Apache HTTP Server&#xff0c;两者都是计算机软件领域的重要实体。 Apache 软件基金会 (ASF)&#xff1a;Apache 软件基金会是一个开发开源软件项目的非营利组织。它为涵盖软件开发各个方面的广泛项目提供支持&#xff0c…

3dmax展厅异形模型怎么做---模大狮模型网

在3ds Max中创建展厅异形模型需要一定的建模技巧和创造力。以下是一般的步骤&#xff1a; 准备设计方案&#xff1a; 首先&#xff0c;需要明确展厅的设计方案和概念&#xff0c;包括展厅的整体结构、空间布局和异形特点等。 创建基本结构&#xff1a; 在3ds Max中&#xff…

MySQL数据库的备份-恢复-日志

一、备份&#xff1a; 1.数据备份的重要性&#xff1a; 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 2.造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难&#xff08;如…

30岁失业的我,选择职场转型,进入AIGC工程师领域,重新开始

去年&#xff0c;刚满30岁的我又一次被公司辞退了&#xff0c;由于学历不高&#xff0c;简历也不出彩&#xff0c;尽管半个月来投了一份又一份的简历&#xff0c;但仍然是石沉大海&#xff0c;我终于不得不开始思考一个以前被我一直刻意压制的想法——职场转型。 尽管知道这条…

大模型知识点汇总——分布式训练

PS&#xff1a;本篇只在宏观上介绍相关概念和技术&#xff0c;不做数学推导和过于细节介绍&#xff0c;旨在快速有一个宏观认知&#xff0c;不拘泥在细节上&#xff0c;导致很混乱。 涉及技术名词 分布式框架等涉及的技术名词很多&#xff0c;很容易让人眼花缭乱&#xff0c;…

echarts 柱形图如何让其中一个柱子的颜色跟其他柱子不同

如何让其中一个柱子的颜色跟其他柱子不同 series: [{data: [120,// 使用对象的形式&#xff0c; value代表当前值, itemStyle设置样式{value: 200,itemStyle: {color: #a90000}},150,80,70,110,130],type: bar}]设置单个柱子颜色&#xff1a; 柱形图单个柱子颜色: https://e…

Vue3+Element Plus+TS开发企业管理后台(二)

使用vite初始化项目 确保你的开发环境中已经安装了Node.js&#xff0c;而且有npm&#xff0c;yarn等包管理工具&#xff0c;然后可以按照vite官方提供的方式初始化项目&#xff1a; yarn create vite跟随提示选择即可&#xff1a; 或者可以直接克隆下面的仓库 https://gith…

flask_restful规范返回值之参数设置

设置重命名属性和默认值 使用 attribute 配置这种映射 , 比如&#xff1a; fields.String(attributeusername) 使用 default 指定默认值&#xff0c;比如&#xff1a; fields.String(defaultsxt) from flask import Flask,render_template from flask_restful import A…

selenium自动化测试-unittest框架

unittest框架的优点 (1)能够组织多个用例去执行 (2)提供丰富的断言方法 (3)能够生成测试报告 unittest框架的核心要素 1. TestCase测试用例 TestCase(测试用例)&#xff0c;最小的测试单元&#xff0c;创建的测试类需要继承该基类 步骤&#xff1a; &#xff08;1&#x…

风丘EV能量流测试解决方案 提高电动汽车续航能力

电动汽车&#xff08;EV&#xff09;近些年发展迅猛&#xff0c;已被汽车业内普遍认为是未来汽车发展的新方向&#xff0c;但现如今电动汽车仍然存在一些短板&#xff0c;导致其还无法替代传统燃油车。对此&#xff0c;首先想到的肯定就是电动车的续航问题。其实解决电动车续航…

VBA技术资料MF133:隐藏编辑栏及计算字符串

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

centos7 使用docker安装了mongo 怎么设置远程链接,必须使用密码才能连接

docker run -d –name mongodb_container -e MONGO_INITDB_ROOT_USERNAMEroot -e MONGO_INITDB_ROOT_PASSWORDroot -e MONGO_INITDB_DATABASEdataserver -p 27017:27017 \ 无法在mongo容器里编辑文件 如果你无法直接编辑 MongoDB 容器内的配置文件&#xff0c;你可以尝试…

基于java+springboot+vue实现的大学生二手物品交易商城(文末源码+Lw+ppt)23-329

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这…