day38|leetcode 322零钱兑换,279.完全平方数,139.单词拆分

322. 零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1

你可以认为每种硬币的数量是无限的。

这题与零钱兑换II的区别在于本题需要返回最小数

动规五部曲:

(1)dp数组的含义:dp[j]代表凑成总金额为j所需的最少的硬币个数

(2)确定递推公式:dp[j-coins[i]]就是凑成j-coins[i]所需的最少的硬币个数,加上coins[i]就是dp[j]即dp[j-coins[i]]+1,由于求的是最小值,所以dp[j]=min(dp[j-coins]+1,dp[j]);

(3)初始化:dp[0]=0,由递推公式可知为了防止0覆盖之后的所有元素,除了dp[0]其他位置都应该初始化为非零数

(4)确定遍历顺序:由于求的是最小值,所以并不需要考虑组合数还是排列数

(5)打印dp数组

class Solution {
public:int coinChange(vector<int>& coins, int amount) {int bagweight = amount;vector<int>dp(bagweight+1,INT_MAX);dp[0]=0;for(int i=0;i<coins.size();i++)//先遍历物品{for(int j=coins[i];j<=bagweight;j++){if(dp[j-coins[i]]!=INT_MAX)//如果等于初始值就跳过dp[j]=min(dp[j-coins[i]]+1,dp[j]);}}if(dp[bagweight]==INT_MAX)return -1;return dp[bagweight];}
};

279. 完全平方数

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,14916 都是完全平方数,而 311 不是。

输入:n = 12
输出:3 
解释:12 = 4 + 4 + 4

题目分析:背包容量就是n,完全平方数就是物品

完全平方数就是i*i

动规五部曲:

(1)dp[j]含义:和为j的完全平方数的最少数量

(2)确定递推公式:dp[j]=min(dp[j-i*i]+1,dp[j]);

(3)初始化:dp[0]=0,为了防止后续的值被覆盖,除了dp[0]其他都应该初始化为INT_MAX

(4)确定遍历顺序:求最小值不强调组合数还是排列数

(5)打印dp数组

class Solution {
public:int numSquares(int n) {int bagweight = n;vector<int>dp(bagweight+1,INT_MAX);dp[0]=0;for(int j=0;j<=n;j++)//先遍历背包{for(int i=1;i*i<=j;i++){dp[j]=min(dp[j-i*i]+1,dp[j]);}}return dp[bagweight];}
};

139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

题意分析:字符串是s,单词是物品

动规五部曲:

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

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

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

(3)初始化:由递推公式可知,dp[0]决定了后续的,所以dp[0]=true,其他设为false

(4)确定遍历顺序:先遍历背包后遍历物品,因为s="apple pen apple" 时s=apple+pen+apple,其他顺序不是s,所以强调顺序,也就是属于排列数

(5)打印dp数组

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string>wordSet(wordDict.begin(),wordDict.end());vector<bool>dp(s.size()+1,false);dp[0]=true;for(int j=1;j<=s.size();j++)//先遍历背包{for(int i=0;i<j;i++)//再遍历物品{string str = s.substr(i,j-i);if(wordSet.find(str)!=wordSet.end() && dp[i]){dp[j]=true;}}}return dp[s.size()];}
};

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

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

相关文章

Turing Complete-1位开关

要求如下&#xff1a; 我的思考&#xff1a; 把输入1当作控制信号&#xff0c;把输入2当作输出信号。 通过非门和开关使输入2形成双通道输出&#xff0c; 通道一为输出输入2取反。 通道二为输出输入2本身。 通过输入1来控制两个通道的开闭。

从Transformer到世界模型:AGI核心架构演进

文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破三、构建世界模型的技术路径3.1 …

深度求索DeepSeek横空出世

真正的强者从来不是无所不能&#xff0c;而是尽我所能。多少有关输赢胜负的缠斗&#xff0c;都是直面本心的搏击。所有令人骄傲振奋的突破和成就&#xff0c;看似云淡风轻寥寥数语&#xff0c;背后都是数不尽的焚膏继晷、汗流浃背。每一次何去何从的困惑&#xff0c;都可能通向…

性能优化中的数据过滤优化

目录 以下是一些关于数据过滤优化的策略和方法 索引使用 避免全表扫描 使用分区 数据预处理 合理设计查询 利用缓存机制 数据库层面优化 系统中通常会有一些统计和分析的功能&#xff0c;以前我们主要针对结构化数据&#xff08;关系型数据库存储&#xff09;进行分析&a…

与本地Deepseek R1:14b的第一次交流

本地部署DS的方法&#xff0c;见&#xff1a;本地快速部署DeepSeek-R1模型——2025新年贺岁-CSDN博客 只有16GB内存且没有强大GPU的个人电脑&#xff0c;部署和运行14b参数的DS大模型已是天花板了。 运行模型 ollama run deepseek-r1:14b C:\Users\Administrator>ollama r…

Python 梯度下降法(六):Nadam Optimize

文章目录 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nadam Optimize一、数学原理1.1 介绍1.2 符号定义1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法&#xff08;六&#xff09;&#xff1a;Nad…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

Git 的起源与发展

序章&#xff1a;版本控制的前世今生 在软件开发的漫长旅程中&#xff0c;版本控制犹如一位忠诚的伙伴&#xff0c;始终陪伴着开发者们。它的存在&#xff0c;解决了软件开发过程中代码管理的诸多难题&#xff0c;让团队协作更加高效&#xff0c;代码的演进更加有序。 简单来…

MySQL(Undo日志)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 大部分截图和文章采用该书&#xff0c;谢谢这位大佬的文章&#xff0c;在这里真的很感谢让迷茫的…

全面剖析 XXE 漏洞:从原理到修复

目录 前言 XXE 漏洞概念 漏洞原理 XML 介绍 XML 结构语言以及语法 XML 结构 XML 语法规则 XML 实体引用 漏洞存在原因 产生条件 经典案例介绍分析 XXE 漏洞修复方案 结语 前言 网络安全领域暗藏危机&#xff0c;各类漏洞威胁着系统与数据安全。XXE 漏洞虽不常见&a…

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…

C++STL(一)——string类

目录 一、string的定义方式二、 string类对象的容量操作三、string类对象的访问及遍历操作四、string类对象的修改操作五、string类非成员函数 一、string的定义方式 string是个管理字符数组的类&#xff0c;其实就是字符数组的顺序表。 它的接口也是非常多的。本章介绍一些常…

与,|与||的区别

按位运算符 | 和 & 功能与运算规则 |&#xff08;按位或运算符&#xff09;&#xff1a;对两个操作数的对应二进制位进行逻辑或运算。只要对应的两个二进制位中有一个为 1&#xff0c;则该位的结果为 1&#xff1b;只有当两个二进制位都为 0 时&#xff0c;结果才为 0。&…

轮转数组-三次逆置

题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 void rotate(int* nums, int numsSize, int k){}示例&#xff1a; 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …

登录认证(5):过滤器:Filter

统一拦截 上文我们提到&#xff08;登录认证&#xff08;4&#xff09;&#xff1a;令牌技术&#xff09;&#xff0c;现在大部分项目都使用JWT令牌来进行会话跟踪&#xff0c;来完成登录功能。有了JWT令牌可以标识用户的登录状态&#xff0c;但是完整的登录逻辑如图所示&…

C++11新特性之constexpr

1.介绍 constexpr是C11标准引入的关键字&#xff0c;用于声明常量表达式&#xff0c;其目的是让一些计算在编译时就能完成&#xff0c;从而提高程序的性能与安全性。&#xff08;因为只需要执行一次&#xff09; 在介绍其用法前&#xff0c;先解释一下常量表达式的含义。 常量…

JavaScript 中的 CSS 与页面响应式设计

JavaScript 中的 CSS 与页面响应式设计 JavaScript 中的 CSS 与页面响应式设计1. 引言2. JavaScript 与 CSS 的基本概念2.1 CSS 的作用2.2 JavaScript 的作用 3. 动态控制样式&#xff1a;JavaScript 修改 CSS 的方法3.1 使用 document.styleSheets API3.2 使用 classList 修改…

Python 网络爬虫实战:从基础到高级爬取技术

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 网络爬虫&#xff08;Web Scraping&#xff09;是一种自动化技术&#xff0c;利用程序从网页中提取数据&#xff0c;广泛…

MySQL锁类型(详解)

锁的分类图&#xff0c;如下&#xff1a; 锁操作类型划分 读锁 : 也称为共享锁 、英文用S表示。针对同一份数据&#xff0c;多个事务的读操作可以同时进行而不会互相影响&#xff0c;相互不阻塞的。 写锁 : 也称为排他锁 、英文用X表示。当前写操作没有完成前&#xff0c;它会…

Java中的常见对象类型解析

在Java开发中&#xff0c;数据的组织和传递是一个重要的概念。为了确保代码的清晰性、可维护性和可扩展性&#xff0c;我们通常会根据不同的用途&#xff0c;设计和使用不同类型的对象。这些对象的作用各不相同&#xff0c;但它们共同为构建高效、模块化的软件架构提供支持。 …