LeetCode LCR 103. 零钱兑换【完全背包,恰好装满背包的最小问题】中等

2023-09-19 00:41:07

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

示例 1:

输入:coins = `[1, 2, 5]`, amount = `11`
输出:`3` 
解释:11 = 5 + 5 + 1

示例 2:

输入:coins = `[2]`, amount = `3`
输出:-1

示例 3:

输入:coins = [1], amount = 0
输出:0

示例 4:

输入:coins = [1], amount = 1
输出:1

示例 5:

输入:coins = [1], amount = 2
输出:2

提示:

  • 1 <= coins.length <= 12
  • 1 <= coins[i] <= 2^31 - 1
  • 0 <= amount <= 10^4

注意:本题与主站 322 题相同: https://leetcode-cn.com/problems/coin-change/


解法 完全背包+恰好装满背包的最小问题

拿到动态规划问题后,做以下几个步骤:

  1. 分析是否为背包问题。 背包问题的判定——背包问题具备的特征:给定一个 t a r g e t target target t a r g e t target target 可以是数字也可以是字符串,再给定一个数组 n u m s nums nums n u m s nums nums 中装的可能是数字,也可能是字符串,问:能否使用 n u m s nums nums 中的元素做各种排列组合得到 t a r g e t target target
  2. 如果是背包问题,那么是求组合数、True/False、最大最小三种背包问题中的哪一种。如果是求组合数问题,是否需要考虑元素之间的顺序。需要考虑顺序有顺序的解法,不需要考虑顺序又有对应的解法。
  3. 再分为是0-1背包问题还是完全背包问题。也就是题目给的 n u m s nums nums 数组中的元素是否可以重复使用

粗略一看,本题是求装满背包的最小问题+完全背包。套用模板:

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

Start 方法源码深究——模板方法设计模式

目录一.🦁前言1.1New状态1.2Runnable1.3Runing1.4Block状态1.5Terminated状态二.🦁线程start方法源码剖析2.1虚拟机调用run方法执行线程2.2最少有两个线程在执行2.3不可以重复执行2.4start方法体三.🦁模板方法设计模式3.1基本概念3.2自定义一个场景实现

高云FPGA系列教程(6):ARM定时器使用

文章目录@[toc]1.ARM定时器简介2.FPGA配置3.常用函数4.MCU程序设计5.工程下载本文是高云FPGA系列教程的第6篇文章。本篇文章介绍片上ARMCortex-M3硬核处理器定时器外设的使用,演示定时器溢出中断的配置方法,基于TangNano4K开发板。参考文档:Gowin_EMPU(GW1NS-4C)软

《计算机视觉中的多视图几何》笔记(7)

7ComputationoftheCameraMatrixPPP这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵PPP,当我们知道足够多的X↔xX\leftrightarrowxX↔x,我们该如何计算PPP?如果知道3D和2D点的对应,那么内参和外参可以由基本的线性方程求解问题算出。遇到超定解时的解决办法也

Java面试题基础第十一天

一、java面试题第十一天1.跨域问题怎么解决呢?有以下有几种方法CORS,跨域资源共享我们可以通过springboot为每一个请求设置它的请求头,来设置它的可以跨域的路径,这样可以为每一个请求都可以跨域了@CrossOrigin注解我们可以通过springboot来设置Controller类加个@CrossOrigi

Deformable DETR(2020 ICLR)

DeformableDETR(2020ICLR)detr训练epochs缩小十倍,小目标性能更好Deformableattention结合变形卷积的稀疏空间采样和Transformer的关系建模能力使用多层级特征层特征,不需要使用FPN的设计(直接使用backbone多层级输出)两种提升方法:bbox迭代细化机制2.两

二叉树的概念及存储结构

目录1.树的概念1.1树的相关概念1.2树的表示与应用2.二叉树的概念及结构2.1二叉树的概念2.1.1特殊的二叉树2.2.2二叉树的性质2.2二叉树的结构2.2.1顺序存储2.2.2链式存储这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的认知.1.树的概念树是一种非线性的数据结构,它

Vue2组件通信 - dispatch 和 broadcast

目录8,dispatch和broadcast整体思路实现dispatch使用举例broadcast使用举例承接文章Vue2中10种组件通信方式和实践技巧,因为一篇文章太长无法发表,所以做拆分。8,dispatch和broadcast在Vue@1版本中,有$dispatch和$broadcast这种基于组件树的工作流来通

C++关键词探索:理解变量、函数参数、函数返回值以及类成员函数的修饰符

在C++编程中,我们经常会遇到一些关键词,它们可以用来修饰变量、函数参数、函数返回值以及类的成员函数。这些关键词包括const、static、volatile、mutable、signed、unsigned、long、short、virtual、explicit、inline和friend。让我们一起来深入理解一下这些

基于SSM的高校教学业绩信息管理系统设计与实现

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用JSP技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图​编辑四、核心代码登录相关文件上传封装五、

Vue路由及Node.js环境搭建

1.介绍什么是Vue.js和Node.js?Vue.js和Node.js是两个不同的技术,分别用于前端和后端开发,具有不同的用途和功能:Vue.js:Vue.js是一款流行的前端JavaScript框架,也被称为渐进式框架。它由尤雨溪开发,并由社区支持和维护。Vue.js主要用于构建现代、交互式的Web用户界面。它的核

React中组件通信02——消息订阅与发布、取消订阅以及卸载组件时取消订阅

React中组件通信02——消息订阅与发布、取消订阅以及卸载组件时取消订阅1.前言1.1使用props通信1.2关于useEffect2.安装pubsub-js3.消息订阅与发布3.1简单例子-13.2简单例子-2(完善、优化)——订阅消息+使用消息4.取消订阅4.1取消单个topic4.2取消多个或更多语法4.3卸载

热文推荐