LeetCode算法题解(动态规划)|LeetCode322. 零钱兑换、LeetCode279. 完全平方数
一、LeetCode322. 零钱兑换
题目链接:322. 零钱兑换
题目描述:
给你一个整数数组 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 <= 121 <= coins[i] <= 231 - 10 <= amount <= 104
算法分析:
题目给出硬币的数量无限,所以这是一道完全背包问题。
定义dp数组及下标含义:
dp[j]表示凑成金额为j所需的硬币最少个数。
递推公式:
dp[j]=min(dp[j],dp[j-coins[i]]+1),现有硬币coins[i],那么凑成金额为j所需的最少硬币数可有凑成金额为j-coins[i]所需最少硬币数推出。
初始化:
因为要求的是最少硬币数,所以除dp[0]初始化成0之外,其他所有情况都要初始化成最大值。
遍历顺序:
先遍历不同面额的硬币,在遍历总金额。
打印dp数组进行验证。
代码如下:
class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];for(int i = 1; i < amount + 1; i++) dp[i] = Integer.MAX_VALUE;dp[0] = 0;//除了dp[0]其他都初始化成最大值for(int i = 0; i < coins.length; i++) {//遍历每种硬币for(int j = coins[i]; j <= amount; j++) {//遍历总金额if(dp[j - coins[i]] != Integer.MAX_VALUE) {//注意如果dp[j-coins[i]]是个最大int类型整数的话,dp[j-coins[i]]+1会溢出,变成负数,从而影响比较结果,所以只有它不是初始最大值是,才有选择的必要。dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}
二、LeetCode279. 完全平方数
题目链接:279. 完全平方数
题目描述:
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
示例 1:
输入:n =12输出:3 解释:12 = 4 + 4 + 4
示例 2:
输入:n =13输出:2 解释:13 = 4 + 9
提示:
1 <= n <= 104
算法分析:
因为每个完全平方数可以无限取,所以这也是一道完全背包问题。
定义dp数组及下标含义:
dp[j]表示组成和为j的完全平方数最少数量。
递推公式:
dp[j]=min(dp[j],dp[j-i*i]+1),现有完全平方数i*i,那么组成j的最少完全平方数数量可有dp[j-i*i]推导而出,也即组成j-i*i的最少完全平方数数量加上现在这个完全平方数(i*i)。
初始化:
因为要求的是完全平方数最少数量,所以除dp[0]初始化成0外,其他所有情况都要初始化成最大值。
遍历顺序:
先遍历小于等于目标和n的每个完全平方数,在遍历总和。
打印dp数组进行验证。
代码如下:
class Solution {public int numSquares(int n) {int[] dp = new int[n + 1];//除dp[0]意外,其他所有情况都初始化成最大值dp[0] = 0;for(int i = 1; i <= n; i++)dp[i] = Integer.MAX_VALUE;for(int i = 1; i * i <= n; i++) {//遍历每个完全平方数for(int j = i * i; j <= n; j++) {//遍历总和dp[j] = Math.min(dp[j],dp[j-i * i] + 1);}}return dp[n];}
}
总结
这两道题都是完全背包问题中,求最少元素个数的情况。
相关文章:
LeetCode算法题解(动态规划)|LeetCode322. 零钱兑换、LeetCode279. 完全平方数
一、LeetCode322. 零钱兑换 题目链接:322. 零钱兑换 题目描述: 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一…...
Python Web开发基础知识篇
一,基础知识篇 本片文章会简单地说一些python开发web中所必须的一些基础知识。主要包括HTML和css基础、JavaScript基础、网络编程基础、MySQL数据库基础、Web框架基础等知识。 1,Web简介 Web,全称为World Wide Web,也就是WWW,万…...
企业计算机服务器中了360勒索病毒怎么办,360勒索病毒解密文件恢复
计算机技术的不断发展,为企业的生产运营提供了极大便利,不仅提升了办公效率,还促进了企业的发展。企业计算机在日常工作中一定加以防护,减少网络威胁事件的产生,确保企业的生产生产运营。最近,网络上的360后…...
LeetCode无重复字符的最长字符串的Java实现
题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输…...
opencv-图像平滑
高斯平滑 高斯平滑即采用高斯卷积核对图像矩阵进行卷积操作。高斯卷积核是一个近似服从高斯分布的矩阵,随着距离中心点的距离增加,其值变小。这样进行平滑处理时,图像矩阵中锚点处像素值权重大,边缘处像素值权重小。 import cv2 …...
【开源】基于Vue.js的天然气工程运维系统的设计和实现
项目编号: S 022 ,文末获取源码。 \color{red}{项目编号:S022,文末获取源码。} 项目编号:S022,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程…...
数据丢失抢救神器之TOP10 Android 数据恢复榜单
在快节奏的数字时代,我们的生活越来越与智能手机交织在一起,使它们成为重要数据和珍贵记忆的存储库。由于意外删除、软件故障或硬件故障而丢失数据可能是一种痛苦的经历。值得庆幸的是,技术领域提供了 Android 数据恢复软件形式的解决方案。这…...
梨花声音教育,动作电影中配音也能带来听见“冲击力”
在为动作电影提供配音服务时,配音员家需要通过声音的力量来增强画面上的动作张力、传递角色的活力,以及呈现出电影中的紧迫感。动作片充斥着快节奏的场景交替、紧张的格斗和惊险的逃逸等元素,配音需要精确、生动且充满动力。为动作电影配音应…...
Elaticsearch学习
Elaticsearch 索引 1、索引创建 PUT /index_v1 {"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"aaa": {"type": "keyword","store&qu…...
【腾讯云云上实验室】向量数据库+LangChain+LLM搭建智慧辅导系统实践
目录 一、搭建智慧辅导系统——向量数据库实践指南1.1、创建向量数据库并新建集合1.2、使用 TKE 快速部署 ChatGLM1.3、部署 LangChain PyPDFVectorDB等组件1.4、配置知识库语料1.5、基于 VectorDB LLM 的智能辅导助手 二、LLM时代的次世代引擎——向量数据库2.1、向量数据库L…...
从0开始学习JavaScript--深入了解JavaScript框架
JavaScript框架在现代Web开发中扮演着关键角色,为开发者提供了丰富的工具和抽象层,使得构建复杂的、高性能的Web应用变得更加容易。本文将深入探讨JavaScript框架的核心概念、常见框架的特点以及它们在实际应用中的使用。 JavaScript框架的作用 JavaSc…...
【教3妹学编程-算法题】二叉树中的伪回文路径
3妹:好冷啊, 冻得瑟瑟发抖啦 2哥 : 又一波寒潮来袭, 外面风吹的呼呼的。 3妹:今天还有雨,2哥上班记得带伞。 2哥 : 好的 3妹:哼,不喜欢冬天,也不喜欢下雨天,要是我会咒语…...
快速上手Banana Pi BPI-M4 Zero 全志科技H618开源硬件开发开发板
Linux[编辑] 准备[编辑] 1. Linux镜像支持SD卡或EMMC启动,并且会优先从SD卡启动。 2. 建议使用A1级卡,至少8GB。 3. 如果您想从 SD 卡启动,请确保可启动 EMMC 已格式化。 4. 如果您想从 EMMC 启动并使用 Sdcard 作为存储,请确…...
Node.js入门指南(三)
目录 Node.js 模块化 介绍 模块暴露数据 导入模块 导入模块的基本流程 CommonJS 规范 包管理工具 介绍 npm cnpm yarn nvm的使用 我们上一篇文章介绍了Node.js中的http模块,这篇文章主要介绍Node.js的模块化,包管理工具以及nvm的使用。 Node…...
Leetcode—2824.统计和小于目标的下标对数目【简单】
2023每日刷题(三十九) Leetcode—2824.统计和小于目标的下标对数目 实现代码 class Solution { public:int countPairs(vector<int>& nums, int target) {int n nums.size();sort(nums.begin(), nums.end());int left 0, right left 1;i…...
【基础架构】part-2 可扩展性
文章目录 可扩展性(Scalability)2.1 水平扩展2.2 垂直扩展2.3 弹性扩展 三、可靠性(Reliability)3.1 容错机制3.2 错误处理和恢复策略3.3 监控和自动化运维 四、 安全性(Security)4.1 身份验证和授权4.2 加…...
[SWPUCTF 2021 新生赛]no_wakeup
直接赋值即可 $a ->admin admin; $a ->passwd wllm; 发现没有绕过,改成大于2的绕过__wakeup 这是因为PHP在反序列化时会检查序列化字符串的长度,如果长度小于等于2,则不会调用__wakeup()方法。...
类和对象(3)日期类的实现
日期类的实现 一,声明二,函数成员定义2.1构造函数2.2获取月份天数2.3比较运算符2.3.1等于和大于2.3.2其他 2.4计算运算符2.4.1 &&2.4.2-&&- 2.5日期-日期 一,声明 class Date { public:Date(int year 1, int month 1, int…...
分布式篇---第五篇
系列文章目录 文章目录 系列文章目录前言一、你知道哪些限流算法?二、说说什么是计数器(固定窗口)算法三、说说什么是滑动窗口算法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去…...
SpringMVC(二)
八、HttpMessageConverter HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文 HttpMessageConverter提供了两个注解和两个类型:RequestBody,ResponseBody,Reque…...
别再傻傻全量引入antd了!React项目用craco+less-loader搞定按需加载与主题定制(附最新版本避坑指南)
2023终极方案:用cracoless-loader实现antd按需加载与主题定制 在React生态中,antd作为企业级UI库的标杆,其丰富的组件和设计语言深受开发者喜爱。但随着项目规模扩大,全量引入antd带来的性能问题逐渐显现——一个中型项目仅antd样…...
用Python实现切比雪夫距离:从国际象棋到KNN算法的实战指南
用Python实现切比雪夫距离:从国际象棋到KNN算法的实战指南 想象一下国际象棋棋盘上的国王,它每一步可以朝任意方向移动一格——横着走、竖着走,甚至斜着走。这种看似简单的移动规则,背后隐藏着一个强大的数学概念:切比…...
从“国王-男人+女人=女王”到推荐系统:Word2Vec的Skip-gram与CBOW模型,到底该怎么选?
从词向量到业务落地:Skip-gram与CBOW模型工程选型指南 当我们在电商平台搜索"机械键盘"时,推荐系统会自动提示"游戏鼠标";当我们在音乐APP收听周杰伦的歌曲时,系统会推荐类似风格的歌手——这些智能推荐背后&…...
YOLO26最新创新改进系列:(粉丝反馈涨点模型TOP3)融合轻量级网络Ghostnet(幽灵卷积or幻影卷积),实测参数量降低!轻量化水文小神器!
YOLO26最新创新改进系列:(粉丝反馈涨点模型TOP3)融合轻量级网络Ghostnet(幽灵卷积or幻影卷积),实测参数量降低!轻量化水文小神器! 购买相关资料后畅享一对一答疑! 畅享超多免费持续更新且可大…...
Dify医疗环境零信任配置全图解:从患者ID加密到API网关mTLS双向认证,含12个生产级YAML模板
第一章:Dify医疗安全配置的合规基线与威胁建模在医疗AI应用落地过程中,Dify平台的安全配置必须严格遵循《GB/T 35273—2020 信息安全技术 个人信息安全规范》《HIPAA Security Rule》及《医疗器械软件注册审查指导原则》等多维合规要求。合规基线并非静态…...
别再手动改代码格式了!用IntelliJ IDEA的CheckStyle插件,5分钟搞定团队代码规范
告别代码风格混乱:IntelliJ IDEA CheckStyle插件实战指南 当团队协作开发时,代码风格不一致往往成为效率杀手。想象一下:每次代码评审都要花半小时讨论缩进和命名规范,合并分支时因为格式问题产生大量冲突,接手老项目时…...
Gerbv终极指南:从新手到专家的PCB设计验证全流程实战
Gerbv终极指南:从新手到专家的PCB设计验证全流程实战 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾因Gerber文件显示异常而耽误PCB生产进度?是否在多…...
Blazor Server现代化改造指南(2026生产环境零故障部署手册)
第一章:Blazor Server现代化改造的演进逻辑与2026生产级定位Blazor Server 正从“实时交互原型平台”加速演进为支撑高并发、强合规、可观测企业级应用的核心运行时。这一转变并非简单功能叠加,而是由.NET 8/9 的信号量优化、WebSocket 协议栈重构、以及…...
RAG系统中上下文窗口优化策略与实践
1. 项目概述在自然语言处理领域,上下文长度管理一直是影响模型性能的关键因素。特别是在检索增强生成(RAG)系统中,如何高效处理长文本上下文直接决定了最终生成质量。这个主题探讨的是RAG架构中第五个核心环节——上下文窗口的优化…...
别再傻傻分不清了!5分钟搞懂.NET、C#和ASP.NET到底啥关系(附学习路线图)
微软技术栈入门指南:从零构建.NET技术认知体系 第一次接触微软技术栈时,那些以".NET"结尾的名词确实让人眼花缭乱。记得我刚开始学习时,曾花了整整两周时间才理清这些概念之间的关系。本文将用最直观的方式帮你建立清晰的技术认知框…...
