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

news2025/1/9 1:09:44

前言:鸽了好多天了哈哈哈,虽然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]要存的时min
    int len = coins.size();
    // INT_MAX + 1 会越界,所以耍小聪明就 INT_MAX-1
    vector<int> dp(amount+1,INT_MAX-1);
    dp[0] = 0;//凑成0元 需要0个coin
    for(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.coloradmin.cn/o/1546971.html

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

相关文章

城市内涝排水系统最新模型:慧天【HTWATER】与SWMM完美耦合

查看原文>>> 城市内涝水文水动力模型&#xff1a;慧天【HTWATER】 【城市内涝水文水动力模型介绍】 慧天排水数字化分析平台针对城市排水系统基础设施数据管理的需求&#xff0c;以及水文、水力及水质模拟对数据的需求&#xff0c;实现了以数据库方式对相应数据的存…

静态资源动态访问的细节补充import()与new URL

教学视频的补充 静态资源的动态访问【渡一教育】_哔哩哔哩_bilibili import里若用引号拼接,那么打包结果不会有图片 细节1:得用es6的反单引号才可以 细节2:不能以变量结尾 var p 12 //错误import(./assets/ p .jpg).then(res > {console.log(res, res);}) //正确var p…

201812 CSP认证 | CIDR合并

CIDR合并 难是真的不难但是也写了我几个小时服了 这道题在有计网的基础上就很好理解了&#xff0c;没有在格式上有任何刁难你的。这里不讲背景了 官网提交结果以及满分代码如下&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; typedef…

Qt Design Studio 软件怎么用(详细+通俗+有趣)

建议&#xff1a;本文长期更新&#xff0c;建议点赞/收藏&#xff01; 1. 啥是Qt Design Studio&#xff1f; Qt Design Studio 是一个用于设计和开发用户界面的工具&#xff0c;特别适合开发跨平台应用程序。它结合了UI设计和开发的工作流程&#xff0c;使得设计师和开发者可…

​奶茶店小程序有哪些功能

​奶茶店作为饮品行业的一种热门经营模式&#xff0c;拥有自己的小程序可以带来诸多便利和增长机会。在这篇文章中&#xff0c;我们将探讨奶茶店小程序应该具备的功能&#xff0c;以满足消费者的需求&#xff0c;提升店铺的运营效率和用户体验。 1. **在线订购功能**&#xff…

linux文本三剑客 --- grep、sed、awk

1、grep grep&#xff1a;使用正则表达式搜索文本&#xff0c;将匹配的行打印出来&#xff08;匹配到的标红&#xff09; 命令格式&#xff1a;grep [option] pattern file <1> 命令参数 -A<显示行数>&#xff1a;除了显示符合范本样式的那一列之外&#xff0c;并…

Windows/Mac 上的 7 个顶级数据恢复软件榜单

数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。该文件恢复软件可以恢复文件、文档、视频、照片等。这些应用程序支持许多标准文件格式&#xff0c;如 PNG、RTF、PDF、HTML、JPG、MP3 等。以下是具有流行功能的顶级数据恢复软件列表和网站链接。磁盘恢复软件列表包…

【Python系列】Python 中 YAML 文件与字典合并的实用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

真假难辨:凯特王妃最新视频疑似AI合成,公众哗然!

会议之眼 快讯 北京时间3月23日凌晨&#xff0c;英国的凯特王妃发布了一段震撼人心的视频声明&#xff0c;坦诚自己正在面临一场艰难的挑战——患上了癌症。她坦言目前正在接受预防性化疗&#xff0c;并处于治疗的“早期阶段”&#xff0c;这一消息是在她暂时退出公众生活两个多…

智慧城市一屏统览,数字孪生综合治理

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维&#xff0c;从构成城市诸多要素、结构、功能等方面入手&#xff0c;系统推进…

力扣Lc21--- 389. 找不同(java版)-2024年3月26日

1.题目描述 2.知识点 &#xff08;1&#xff09;在这段代码中&#xff1a; // 统计字符串s中每个字符的出现次数for (int i 0; i < s.length(); i) {count[s.charAt(i) - a];}对于字符串s “abcd”&#xff1a; 当 i 0&#xff0c;s.charAt(i) ‘a’&#xff0c;ASCII…

Kali开启远程服务

一&#xff0c;先切换root账户 二、kali开启远程服务 1&#xff0c;修改远程登录的配置文件 vim /etc/ssh/sshd_config &#xff08;用文本编辑器打开此文件) 在文件的普通模式下&#xff0c;使用/PermitRootLogin&#xff0c;回车&#xff0c;查找到该行&#xff0c;i&#…

鸿蒙OS开发实例:【demo选择列表限定数量】

效果图&#xff1a; 示例代码 // 使用 DevEco Studio 3.1.1 Release 及以上版本&#xff0c;API 版本为 api 9 及以上。 // 主要功能及注意事项&#xff1a; // 该组件展示了一个乘客选择列表。列表中的每个项目包含一个复选框和对应的乘客姓名&#xff0c; // 用户点击任意一…

Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的&#xff1a; 请求访问缓存&#xff0c;缓存有数据就返回&#xff0c;缓存无数据就去数据库里面查数据写入到缓存中。 1、缓存穿透问题 但是如果由恶意请求&#xff0c;短时间内大量的访问不存在的数据&#xff0c;这时每个请求…

工作中遇到的疑难杂症,以及解决办法

一 pagehelper和自定义mybatis拦截器冲突bug 1.1 问题描述 当在springboot工程&#xff0c;持久层使用mybatis&#xff0c;且使用pagehelper实现分页功能&#xff0c;当随着业务发展&#xff0c;需要自定义一个mybatis的拦截器实现sql的打印&#xff0c;但是出现拦截器失效&…

flac和mp3可以互相转换吗?flac和mp3互相转换的方法

一&#xff0c;什么是FLAC格式 FLAC即是Free Lossless Audio Codec的缩写&#xff0c;中文可解为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码&#xff0c;其特点是无损压缩。不同于其他有损压缩编码如MP3 及 AAC&#xff0c;它不会破坏任何原有的音频资讯&#xff0c…

【保姆级教程】YOLOv8自动数据标注

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple1.3 安装labelme标注工具 pip install labelme二、半自动标注…

MATLAB 自定义生成直线点云(详细介绍) (47)

MATLAB 自定义生成直线点云 (详细介绍)(47) 一、算法介绍二、具体步骤二、算法实现1.代码2.效果一、算法介绍 通过这里的直线生成方法,可以生成模拟直线的点云数据,并通过调整起点、终点、数量和噪声水平等参数来探索不同类型的直线数据。这种方法可以用于测试、验证和开…

【考研数学】跟武忠祥,如何使用好《复习全书》和《高数辅导讲义》?

本人就是全程跟武忠祥老师高分上岸的&#xff01; 高数辅导讲义建议在强化阶段再买就行 在基础阶段把基础篇吃透就ok 本人属于基础很差相当于是零基础的考研党&#xff0c;经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上&#xff0c;写下这篇希望能帮助…

H264码流结构介绍

H264的码流格式 一般有两种格式&#xff1a; 1、Annex B&#xff08;字节流格式&#xff09;&#xff1a;由Network Abstraction Layer Units (NALU)组成&#xff0c;也被称为NAL。每个NALU包都可以被单独解析和处理。 2、MP4格式&#xff0c;也叫RTP包格式。MP4 格式没有起始…