【算法与数据结构】518、LeetCode零钱兑换 II

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:本题的硬币是无数的,因此本题可以抽象成一个完全背包问题。完全背包和01背包的不同之处在于完全背包式从前往后遍历的。在本题的完全背包问题中,amount代表背包的最大重量,coins数组代表物品的重量和价值。 d p [ i ] dp[i] dp[i]代表背包重量为 i i i时,硬币凑成的组合(2 2 1 和 2 1 2这两个是不同排列,但是它们属于一个组合)总数为 d p [ i ] dp[i] dp[i]。我们将 d p [ 0 ] dp[0] dp[0]初始化为1,不需要找零也是一种组合。 d p [ j ] dp[j] dp[j]可以由 d p [ j − c o i n s [ i ] ] dp[j - coins[i]] dp[jcoins[i]]得出。因为求的是组合总数,所以递归公式为: d p [ j ] + = d p [ j − c o i n s [ i ] ] dp[j] += dp[j - coins[i]] dp[j]+=dp[jcoins[i]]特别需要注意的是,因为题目要求的是组合数而不是排列数,所以本题循环采取的是先遍历物品,后遍历背包容量的形式。如果说题目要求的是排列数,例如【算法与数据结构】377、LeetCode组合总和 Ⅳ这道题要求的就是排列数,遍历顺序则需要用先遍历背包容量,后遍历物品的方式,保证每个背包容量所有的排列数都被遍历到。
  程序如下

class Solution {
public:int change(int amount, vector<int>& coins) {vector<int>dp(amount + 1, 0);dp[0] = 1;// 先遍历物品,再遍历背包for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包容量dp[j] += dp[j - coins[i]];}}return dp[amount];}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm), n=amount,m是coin数组的大小。
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;class Solution {
public:int change(int amount, vector<int>& coins) {vector<int>dp(amount + 1, 0);dp[0] = 1;// 先遍历物品,再遍历背包for (int i = 0; i < coins.size(); i++) { // 遍历物品for (int j = coins[i]; j <= amount; j++) { // 遍历背包容量dp[j] += dp[j - coins[i]];}}return dp[amount];}
};int main() {Solution s1;int amount = 5;vector<int> coins = { 1, 2, 5 };int result = s1.change(amount, coins);cout << result << endl;system("pause");return 0;
}

end

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

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

相关文章

JavaScript 学习笔记(WEB APIs Day3)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

AI数据模型支撑下,鼎捷「预测透镜」如何助力汽配厂商浙江华工提质增效?

关于【浙江华工】 浙江华工汽车零部件有限公司&#xff08;以下简称“华工”&#xff09;成立于1987年&#xff0c;位于“中国汽摩配之都”浙江省瑞安塘下镇鲍七工业区&#xff0c;是一家集汽车发动机用冷却水泵和机油泵研发、制造、销售于一体的民营股份制企业。 近些年来&…

每日汇评:黄金的市场注意力转向央行和地缘政治

金价从2000美元附近的数周低点反弹&#xff1b; 到目前为止&#xff0c;黄金的进一步巩固当前价格是当前的主题&#xff1b; 地缘政治、宏观数据和央行是本周的主导市场情绪&#xff1b; 黄金价格设法恢复了平衡&#xff0c;扭转了本周开始时的负面走势&#xff0c;从关键争夺区…

恭迎佛陀与佛陀弟子舍利子的华琪舍利子塔位于泰国帕拉波柔玛塔寺

恭迎佛陀与佛陀弟子舍利子的华琪舍利子塔位于泰国帕拉波柔玛塔寺 &#xff08;华琪国际媒体中心01月21日讯&#xff09;马来西亚华琪舍利子博物馆与泰国甘烹碧帕拉波柔玛塔寺&#xff08;Wat Phra Borommathat&#xff09;于2023 年12月25日携手举办了恭迎76座佛陀与佛陀弟子舍…

【数据结构】 循环单链表的基本操作 (C语言版)

目录 一、循环单链表 1、循环单链表的定义&#xff1a; 2、循环单链表的优缺点&#xff1a; 二、循环单链表的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、循环单链表的初始化 4、循环单链表的插入 5、求单链表长度 6、循环单链表的清空…

人工智能(AI)技术应用:解锁未来的无限可能

随着信息时代的来临&#xff0c;人工智能(AI)技术成为推动社会进步的重要力量。在医疗领域&#xff0c;人工智能技术已经开始发挥重要作用。通过大数据分析和机器学习&#xff0c;人工智能可以帮助医生更准确地诊断疾病、制定治疗方案&#xff0c;缩短治疗时间&#xff0c;提高…

Modbus协议学习第五篇之libmodbus库的编译

前言 本篇博客主要讲解在Windows下的libmodbus库的编译过程&#xff0c;供大家参考。 所需环境&#xff1a;Windows操作系统/ Visual Studio / Github 具体步骤 第一步&#xff1a;下载并解压libmodbus源码 首先我们进入libmodbus库的github地址&#xff1a;libmodbus&#x…

在Go中处理HTTP请求和响应

在Go语言中&#xff0c;处理HTTP请求和响应的关键在于对net/http包的理解和使用。这个包提供了强大的工具&#xff0c;使开发者能够轻松地构建Web应用程序。以下是一个简单的示例&#xff0c;展示了如何在Go中处理HTTP请求和响应。 首先&#xff0c;确保你已经安装了Go语言的开…

记一次NAS问题修复,挂载的硬盘名称发生变化导致文件上传失败,解决问题方案总结

我之前采用Cloudreve搭建了一个内网穿透的网盘管理&#xff0c;最近突发发现文件上传失败&#xff0c;且内容无法访问&#xff0c;这个问题纠结了我一个星期&#xff0c;最终发现是由于挂载的硬盘原来的目录是dve/sda1 不知道什么原因这个名称变成了sdc1 原因解释&#xff1a; …

图像分割实战-系列教程17:deeplabV3+ VOC分割实战5-------main.py

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 deeplab系列算法概述 deeplabV3 VOC分割实战1 deeplabV3 VOC分割实战2 deeplabV3 VOC分割实战3 dee…

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验 目录 智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数…

Flutter编译报错Connection timed out: connect

背景&#xff1a;用Android Studo 创建了Flutter项目&#xff0c;编译运行报错java.net.ConnectException: Connection timed out: connect 我自己的环境&#xff1a; windows11 Android Studio Flutter 截图如下&#xff1a; 将错误日志展开之后&#xff1a; Exception…

LLM面面观之LLM上下文扩展方案

1. 背景 本qiang~这段时间调研了LLM上下文扩展的问题&#xff0c;并且实打实的运行了几个开源的项目&#xff0c;所谓实践与理论相结合嘛&#xff01; 此文是本qiang~针对上下文扩展问题的总结&#xff0c;包括解决方案的整理概括&#xff0c;文中参考了多篇有意义的文章&…

【C++】类和对象(上篇)

文章目录 &#x1f6df;一、面向过程和面向对象初步认识&#x1f6df;二、类的引入&#x1f6df;三、类的定义&#x1f4dd;1、类的两种定义方式&#x1f4dd;2、成员变量命名规则的建议 &#x1f6df;四、类的访问限定符及封装&#x1f369;1、访问限定符&#x1f369;2、封装…

鼠害监测站设立的意义是什么

鼠害监测站对草原生态环境的影响主要体现在以下几个方面&#xff1a; 保护草原植被&#xff1a;鼠害监测站通过实时监测鼠害活动&#xff0c;及时采取控制措施&#xff0c;可以有效减少鼠类对草原植被的破坏&#xff0c;保护草原生态系统的稳定性。维持草原土壤健康&#xff1…

C++ 知识列表【图】

举例C的设计模式和智能指针 当谈到 C 的设计模式时&#xff0c;以下是一些常见的设计模式&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;&#xff1a;用于创建对象的模式&#xff0c;隐藏了对象的具体实现细节&#xff0c;只暴露一个公共接口来创建对象。 单例…

Web04--Flex布局

1、flex布局 1.1 flex认识 1.2 flex组成 1.3 flex布局 1.3.1 主轴对齐方式 <!DOCTYPE html> <html lang"CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

解决Windows下Goland的Terminal设置为Git Bash失败

路径不要选错了&#xff1a; 如果还是不行&#xff1a; 把bash路径加进去试试 goland设置Terminal

uni-app小程序:文件下载打开文件方法苹果安卓都适用

api: const filetype e.substr(e.lastIndexOf(.)1)//获取文件地址的类型 console.log(文档,filetype) uni.downloadFile({url: e,//e是图片地址success(res) {console.log(res)if (res.statusCode 200) {console.log(下载成功,);var filePath encodeURI(res.tempFilePath);…

爬虫案例—抓取找歌词网站的按歌词找歌名数据

爬虫案例—抓取找歌词网站的按歌词找歌名数据 找个词网址&#xff1a;https://www.91ge.cn/lxyyplay/find/ 目标&#xff1a;抓取页面里的所有要查的歌词及歌名等信息&#xff0c;并存为txt文件 一共46页数据 网站截图如下&#xff1a; 抓取完整歌词数据&#xff0c;如下图…