代码随想录算法训练营第四十一天| 322. 零钱兑换、279.完全平方数、139.单词拆分

322. 零钱兑换

在这里插入图片描述

题目链接:322. 零钱兑换
文档讲解:代码随想录
状态:能想到凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],但没想到加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])

思路:
凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])
所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。
递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

注意事项:
考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。
然后凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;

题解:

public int coinChange(int[] coins, int amount) {// 创建一个数组dp,大小为amount + 1,用于存储到达每个金额的最小硬币数int[] dp = new int[amount + 1];// 将dp数组初始化为一个较大的值,表示这些金额暂时无法通过给定的硬币组成Arrays.fill(dp, Integer.MAX_VALUE);// 如果金额为0,则不需要任何硬币dp[0] = 0;// 遍历每一种硬币面值for (int coin : coins) {// 对于每一种硬币,从它的面值开始,直到amount,更新dp数组for (int j = coin; j <= amount; j++) {// 如果使用当前硬币可以减少硬币数,则更新dp[j]if (dp[j - coin] != Integer.MAX_VALUE) {dp[j] = Math.min(dp[j], dp[j - coin] + 1);}}}// 如果dp[amount]仍为初始值,则表示无法用给定的硬币凑出amount,返回-1return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];
}

279.完全平方数

在这里插入图片描述

题目链接:279.完全平方数
文档讲解:代码随想录
状态:做过上道题后感觉还行

思路:
dp[j]:和为j的完全平方数的最少数量为dp[j]
dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。
此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);

题解:

public int numSquares(int n) {// 创建一个大小为n + 1的数组dp,用于存储到达每个数所需的最少完全平方数数量int[] dp = new int[n + 1];// 将dp数组初始化为一个较大的值,表示这些数暂时无法通过完全平方数组成Arrays.fill(dp, Integer.MAX_VALUE);// 如果数字为0,则不需要任何完全平方数dp[0] = 0;// 遍历所有可能的完全平方数for (int i = 1; i <= Math.sqrt(n); i++) {// 对于每一个完全平方数,从它的值开始,直到n,更新dp数组for (int j = i * i; j <= n; j++) {// 如果使用当前完全平方数可以减少完全平方数的数量,则更新dp[j]dp[j] = Math.min(dp[j], dp[j - i * i] + 1);}}// 返回dp[n],即为达到数字n所需的最少完全平方数数量return dp[n];
}

139.单词拆分

在这里插入图片描述

题目链接:139.单词拆分
文档讲解:代码随想录
状态:不会

思路:
单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。
拆分时可以重复使用字典中的单词,说明就是一个完全背包!

dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。

如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true(j < i )。
所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。

从递推公式中可以看出,dp[i] 的状态依靠 dp[j]是否为true,那么dp[0]就是递推的根基,dp[0]一定要为true,否则递推下去后面都都是false了。

题解:

public boolean wordBreak(String s, List<String> wordDict) {// 将wordDict转换为一个HashSet,便于查找HashSet<String> set = new HashSet<>(wordDict);// 动态规划数组boolean[] dp = new boolean[s.length() + 1];dp[0] = true;// 遍历s的每个子串for (int i = 1; i <= s.length(); i++) {for (int j = 0; j < i; j++) {// 如果子串s[j:i]在字典中,且dp[j]为true,则dp[i]设为trueif (dp[j] && set.contains(s.substring(j, i))) {dp[i] = true;break;}}}// 返回结果return dp[s.length()];}

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

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

相关文章

IDEA 好用的插件,必备的插件

1. GitToolBox 菜单栏显示git分支信息 2.MyBatisx 快速定位找到sql的xml文件 3.RestfulToolkit-fix 快速定位接口的插件 默认快捷键: CtrlAltN 4.EasyCamelQSM 字符串转驼峰 默认快捷键: Ctrl Alt Q 5.Maven Helper 检查maven冲突&#xff0c;图形化展示maven依赖的插…

Conan安装与C++第三方环境配置保姆级图文教程(附速查字典)

目录 1 什么是Conan&#xff1f;2 Conan安装与配置3 Conan的常见操作3.1 搜索指定包3.2 安装指定包3.3 本地包管理3.4 查看项目依赖 4 Conan构建项目案例 1 什么是Conan&#xff1f; Conan是一个开源的C/C包管理器&#xff0c;用于管理和构建C/C项目所需的依赖库。传统上&…

【启明智显分享】2.8寸触摸串口屏SC05 Plus应用于智能血压计

2.8寸SC05 Plus串口触摸屏&#xff0c;带WIFI/蓝牙 我国高血压流行病调查显示&#xff0c;成人高血压患病率为27.9&#xff05;、知晓率为46.9&#xff05;、治疗率为40.7&#xff05;、控制率为15.3&#xff05;。由此可见高血压的患病率高&#xff0c;但知晓率和治疗率低&…

【微信小程序开发实战项目】——如何制作一个属于自己的花店微信小程序(1)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

高危行业的安全守护者,顶坚防爆手机无惧挑战

高危行业的安全守护者&#xff0c;防爆手机以卓越性能&#xff0c;无惧极端挑战&#xff0c;为每一位前线工作者筑起坚不可摧的安全防线。石油勘探的深邃海洋、化工生产的复杂车间、矿山的幽深隧道……这些高危行业中&#xff0c;每一步都需谨慎前行&#xff0c;每一刻都需安全…

基于springboot的校园商铺管理系统

功能结构图&#xff1a; 实现图&#xff1a; 后台功能&#xff1a; 商品管理 公告管理 前台页面 详情 订单 我的订单

SciencePub学术刊源 | 7月SCI/SSCI/EI/CNKI刊源表已更新!(内含TOP及CCF推荐)

【SciencePub学术】我处SciencePub学术2024年7月SCI/SSCI/EI/CNKI刊源表已更新&#xff01;内含多本中科院TOP、CCF推荐以及进展超顺的优质期刊&#xff0c;最快1-3个月录用&#xff01; 计算机领域重点SCI 环境地质化学领域重点SCI 生物医学领域重点SCI 数学材料领域重点SCI 各…

同星TTS系列产品全新亮相:让开发测试变得更简单!

TTS系列产品 如果需要完整地测试 ECU&#xff0c;不仅需要将通信网络连接到测试系统&#xff0c;还需要连接 I/O 接口。同星的TTS测试系统将连接 I/O 通道所需的所有电路组件集成在一个模块中&#xff0c;可以极大地简化测试台架和HIL测试系统的设置&#xff0c;提高搭建和测试…

武汉星起航:跨境电商领域的领航者,助力合作伙伴全球布局

在跨境电商的汹涌浪潮中&#xff0c;武汉星起航电子商务有限公司如同一颗璀璨的明星&#xff0c;自2017年起便以亚马逊自营店铺为核心业务&#xff0c;不断积累实战运营经验&#xff0c;逐步建立了自己在市场中的稳固地位。随着2020年公司的正式成立&#xff0c;武汉星起航明确…

学习笔记——动态路由——IS-IS中间系统到中间系统(背景)

一、IS-IS技术背景 1、前言 IS-IS最初是国际标准化组织ISO(the International Organization for Standardization)为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。 和OSPF一样&#xff0c;IS-IS也是一种基于链路状态并使用最短路径优先…

浅谈制造企业如何借力EHS,让安全管理上新台阶

当今商业环境中&#xff0c;企业管理不仅关注经济效益&#xff0c;更将目光投向了长远发展的基石——EHS&#xff08;环境Environment、健康Health、安全Safety&#xff09;管理体系。这一体系的崛起&#xff0c;标志着企业管理理念的一次深刻变革&#xff0c;它如同企业的守护…

Chisel学习笔记(1)——Chisel安装与Verilog代码仿真

参考链接&#xff1a; https://www.chisel-lang.org/docs/installation 使用Chisel语言编写硬件描述语言&#xff0c;相比于使用Verilog会更加地灵敏快捷&#xff0c;Coding效率更高&#xff0c;但似乎debug会出现一些小问题。但新工具还是要尝试一下才知道好不好用。 1 安装C…

构建RAG+nebula graph(知识图谱KG)

目标&#xff1a;通过利用 LlamaIndex 和 NebulaGraph 为费城费城人队&#xff08;Philadelphia Phillies&#xff09;构建一个RAG流程&#xff0c;深入探讨知识图谱。 NebulaGraph 是市场上最好的知识图谱数据库之一。它是开源的、分布式的&#xff0c;并且能够处理具有亿万边…

【linux】网络基础(2)——udp协议

文章目录 引言udp协议的特点udp的头部结构UDP的工作原理简单的UDP网络程序套接字的认识udp服务端代码udp客户端代码服务端运行 引言 用户数据报协议&#xff08;User Datagram Protocol, UDP&#xff09;是一种无连接的传输层协议。它是因特网协议家族的一部分&#xff0c;定义…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

超酷的打字机效果?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 900 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段&#xff0c;实现打字机般的效果或其他类似的离散动画效果。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代…

Python入门 2024/7/2

目录 格式化的精度控制 字符串格式化 对表达式进行格式化 小练习&#xff08;股票计算小程序&#xff09; 数据输入 布尔类型和比较运算符 if语句 小练习&#xff08;成人判断&#xff09; if-else语句 if-elif-else语句 练习&#xff1a;猜猜心里数字 嵌套语句 猜…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

offer7.重建二叉树

根据二叉树的前序遍历和中序遍历重建二叉树 问题描述&#xff1a;输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如&#xff0c;输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3…

二叉树之遍历OJ(含迭代)

目录 1.递归实现 前言 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&#xff09;后序遍历 2.迭代实现 前言 &#xff08;1&#xff09;前序遍历 方法一 方法二 &#xff08;2&#xff09;中序遍历 方法一 方法二 &#x…