【面试经典150 | 动态规划】零钱兑换

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:动态规划
  • 写在最后

Tag

【动态规划】【数组】


题目来源

322. 零钱兑换


解题思路

方法一:动态规划

定义状态

dp[i] 表示凑成总金额的最少硬币个数。

状态转移

从小到大枚举要凑成的金额 i,如果当前的金额可以使用面额数组中的某个面额 coin 凑成总金额的一部分,则可以更新

d p [ i ] = m i n ( d p [ i ] , d p [ i − c o i n ] + 1 ) dp[i] = min(dp[i], dp[i - coin] + 1) dp[i]=min(dp[i],dp[icoin]+1)

base case

dp[0] = 0,表示凑成总金额 0 的硬币数量为 0。

最后返回

dp[amount],表示凑成总金额 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 (const auto coin : coins) {if (coin <= i) {dp[i] = min(dp[i], dp[i-coin] + 1);}}}return dp[amount] > amount ? -1 : dp[amount]; }
};

复杂度分析

时间复杂度: O ( S n ) O(Sn) O(Sn) S S S 是题目给定的需要凑成的总金额数, n n n 是面额数。我们一共需要计算 O ( S ) O(S) O(S) 个状态,每个状态需要枚举 n n n 个面额进行状态转移,所以时间复杂度为 O ( S n ) O(Sn) O(Sn)

空间复杂度: O ( S ) O(S) O(S)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

openssl3.2 - exp - BIO_push()超过2个节点的应用- 以(aes-128-cbc + base64)为例

文章目录 openssl3.2 - exp - BIO_push()超过2个节点的应用- 以(aes-128-cbc base64)为例概述笔记END openssl3.2 - exp - BIO_push()超过2个节点的应用- 以(aes-128-cbc base64)为例 概述 BIO_push()形成了一个链. 理论上, 多个BIO连在一起, 只需要向BIO链头写数据, 然后B…

详解ARP攻击原理、类型、机制、欺骗主机、仿冒网关、泛洪攻击,以及网络攻击中如何快速判断客户端是否存在恶意连接?

详解ARP攻击原理、类型、机制、欺骗主机、仿冒网关、泛洪攻击,以及网络攻击中如何快速判断客户端是否存在恶意连接? ARP攻击(Address Resolution Protocol attack)是一种网络攻击技术,它利用了ARP协议的设计缺陷来实施攻击。ARP是网络协议中用于将网络层的IP地址解析为链路…

舵机烧录

舵机烧录 一、硬件连接1、准备物资2、连接&#xff08;1&#xff09;舵机线一侧连接舵机控制板&#xff0c;另一侧连接舵机&#xff08;2&#xff09;老安卓线一侧连接舵机控制板&#xff0c;一侧连接电脑&#xff08;3&#xff09;接上低压电池 二、软件使用1、打开舵机烧录软…

表格中的状态类型值(tag)

一&#xff1a;数字转换为简单的中文值 ** 不用转换直接用find()方法&#xff1a;在statusList里找&#xff1b; **lastHandleCode是对应的获取到的每行数据的code值&#xff1b; vue: <el-table-column label"执行状态" align"center"><templat…

Vmware虚拟机无法用root直连说明

Vmware虚拟机无法用root直连说明 背景目的SSH服务介绍无法连接检查配置 背景 今天在VM上新装了一套Centos-stream-9系统&#xff0c;网络适配器的连接方式采用的是桥接&#xff0c;安装好虚拟机后&#xff0c;在本地用ssh工具进行远程连接&#xff0c;ip、用户、密码均是成功的…

【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)

【C00384】基于&#xff08;JavaWeb&#xff09;Springboot的民航网上订票系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

如何简单在手机上/移动端测试web程序

也许你在搜索到如何在手机上测试web的方法是&#xff1a; Chrome DevTools模拟手机调试 岩鼠平台真机调试 weinre远程调试工具 等等等待 但也许只是需要在手机上简单试用一下我们开发的web 目录 一、前置条件 二、安装Live Server扩展 三、以Live Server运行程序 四、访问…

JS快速排序模板

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 <…

(vue)el-table表格回显返回的已勾选的数据

(vue)el-table表格编辑时回显返回的已勾选的数据 tableData数据&#xff1a; el-tableref"multipleTable":data"tableData"... >...<el-table-column prop"result" label"相关.." align"center" width"220"…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 &#xff08;一&#xff09;基础配置… 3 &#xff08;二&#xff09;有线网络配置… 4 &#xff08;三&#xff09;无线网络配置… 6 &#xff08;四&a…

数据拨号失败之CLIENT_END

问题 今天运维同事反馈了一个数据拨号超时的问题&#xff0c;抓了modem日志&#xff0c;需要分析下原因。 分析 首先看到attach过程是成功的&#xff1a; [0xB0ED] OTA LOG 04:05:09.086400 LTE NAS EMM Plain OTA Outgoing Mes…

Halcon与C#联合开发——1.读取图片、图像二值化

在vs中引入halcon控件 修改目标平台为 x64 拖出三个控件 代码展示 using System; using System.Windows.Forms; //引用支持halcon的命名空间 using HalconDotNet;namespace _1.HalconDisplay {public partial class Form1 : Form {// HObject 是Halcon库中表示图像和其他图形…

微信小程序的页面交互练习——实现比较两数大小功能

前提&#xff1a;配置好页面后 一、在wxml里面搭建好框架&#xff1a; <navigation-bar title"Weixin" back"{{false}}" color"black" background"#FFF"></navigation-bar> <scroll-view class"scrollarea"…

设置 WebView,禁止缩放网页

在 Android 14 中,你可以通过以下步骤来设置 WebView,禁止缩放网页: 在 WebView 加载网页之前,获取 WebSettings 对象: WebSettings webSettings webView.getSettings();使用 WebSettings 对象禁用缩放: webSettings.setSupportZoom(false); webSettings.setBuiltInZoomCon…

【数据结构】受限制的线性表——队列

&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;个人主页&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;数据结构专栏&#x1f388;&#x1f388;&#x1f388;&…

Nginx(面试)

NGINX 速记问答 Q 什么是Nginx&#xff1f;它的主要特点是什么&#xff1f; A Nginx是一个高性能的开源Web服务器和反向代理服务器。它以高并发、低内存消耗和高稳定性著称。 Q Nginx与Apache Web服务器有什么区别&#xff1f; A Nginx与Apache相比&#xff0c;更适用于处…

实现UI自动化测试,这5个常见问题你必须知道!

UI自动化测试一直都是如此的令人纠结&#xff0c;自动化测试初学者总是拿它入门&#xff0c;但有些经验丰富者对其又是毁誉参半&#xff0c;抑或抛出分层自动化测试那个经典的“金字塔”&#xff0c;来说明UI自动化测试还是少做为好。 我在从事7年产品研发之后&#xff0c;临危…

KMP算法模板(Java)

KMP算法是一种字符串匹配算法&#xff0c;用于匹配模式串P在文本串S中出现的所有位置&#xff0c;例如S“abc”&#xff0c;P“aba”那么出现的所有位置是1,3&#xff0c;这里我不细说他的原理&#xff0c;只告诉模板了。 import java.math.BigInteger; import java.util.*;pub…

DevOps是什么

DevOps 是一种将软件开发 (Dev) 和 IT运维 (Ops) 结合起来的实践、文化和哲学&#xff0c;旨在缩短系统开发生命周期&#xff0c;提供高质量的软件持续交付。它涉及多个关键实践和工具&#xff0c;其核心目的是加强开发和运维团队之间的协作和通信。以下是构成DevOps的一些重要…

c语言--实用调试技巧

1什么是bug 2调试是什么&#xff0c;有多重要&#xff1f; 3debug与release 4windows环境调试简绍 5一些调试的实例 6如何写出好的代码&#xff08;便于调试&#xff09; 7编程常见错误 1什么是bug 导致计算机出现问题就叫bug 2调试是什么&#xff0c;有多重要&#x…