当前位置: 首页 > news >正文

代码随想录day38|| 322零钱兑换 279完全平方数 139单词拆分

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

代码·:

class Solution {  
public:  int coinChange(vector<int>& coins, int amount) {  // 创建一个大小为 amount + 1 的向量 dp,初始化为 amount + 1。  // 这里使用 amount + 1 是因为这是一个无法达到的最大值 (相当于无穷大)。  vector<int> dp(amount + 1, amount + 1);   dp[0] = 0;  // 当金额为0时,需要0个硬币。  // 遍历所有的硬币面额  for (int i = 0; i < coins.size(); i++) {  // 对于每种硬币面额,更新 dp 表,以此每次可以选择当前硬币。  for (int j = coins[i]; j <= amount; j++) {  // 这里选择当前硬币,并且计算选择当前硬币后可能达到的最小硬币数  dp[j] = min(dp[j], dp[j - coins[i]] + 1);  }  }  // 如果 dp[amount] 仍然是 amount + 1,说明无法凑成目标金额,返回 -1;  // 否则,返回组成目标金额的最小硬币数。  return dp[amount] > amount ? -1 : dp[amount];  }  
};  

  /*dp[j] = min(dp[j], dp[j - coins[i]] + 1); 这段代码的性质:

dp[j]只有在合法的数据上+1才算是合法,dp数组里的所有的合法的数据都是在 dp[j - coins[i]] + 1合法的基础上得来的,如果 dp[j - coins[i]] + 1不合法,意思就是 dp[j - coins[i]] + 1=amount+2,此时dp[j]不变,还是amount+1,只有在dp[j - coins[i]]这个数据合法(就是小于不可能值amount+1)时才能进行数据的覆盖*/

1. 确定 dp 数组以及下标和对应值的含义

  • dp 数组:dp[i] 表示凑成金额 i 所需的最少硬币个数。
  • 下标 i:表示金额。
  • dp[i] 值:最少的硬币数量,如果无法凑成该金额,初始化为一个无法到达的最大值,即 amount + 1。

2. 确定递推公式

  • 公式dp[j] = min(dp[j], dp[j - coins[i]] + 1)
  • 含义:不使用当前硬币 coins[i] 时,所需的硬币数为 dp[j];使用当前硬币时,需要再加上一个 coins[i],递推出 dp[j - coins[i]] + 1

3. dp 数组如何初始化

  • 初始化为 dp[0] = 0,因为金额为0时不需要硬币。
  • 其余的 dp 值初始化为 amount + 1,代表无法达成或不可达(等效于无穷大)。

4. 确定遍历顺序

  • 外层循环:遍历每种硬币(for (int i = 0; i < coins.size(); i++)),以便更新 dp 数组。
  • 内层循环:从当前硬币的面额开始遍历到目标金额(for (int j = coins[i]; j <= amount; j++)),更新可以凑成金额 j 的最少硬币个数。

5. 举例推导 dp 数组

假设 coins = [1, 2, 5],amount = 11。

  • 初始化:dp = [0, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf, inf]

  • 使用面额 1

    • 更新 dp 值:dp = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  • 使用面额 2

    • 更新 dp 值:dp = [0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
  • 使用面额 5

    • 更新 dp 值:dp = [0, 1, 1, 2, 2, 1, 2, 2, 3, 3, 2, 3]

最后,dp[11] = 3,表示使用面额 [1, 2, 5] 可以凑成11的最少硬币数量为3(例如 5 + 5 + 1)。

279完全平方数 

力扣题目链接

题目描述:

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

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

示例 1:

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

示例 2:

输入:n = 13
输出:2
解释:13 = 4 + 9

代码:(跟上一题一摸一样,不再过多赘述)

class Solution {
public:int numSquares(int n) {vector<int> dp(n+1,n+1);dp[0]=0;dp[1]=1;for(int i=1;i<n;i++){for(int j=i*i;j<=n;j++){dp[j]=min(dp[j],dp[j-i*i]+1);}}return dp[n]>n? -1 : dp[n];}
};

 139单词拆分

力扣题目链接

题目描述:

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

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

示例 1:

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

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。注意,你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false
class Solution {  
public:  bool wordBreak(string s, vector<string>& wordDict) {  // 将 wordDict 中的单词放入一个集合 wordSet 中,以便快速查找。  set<string> wordSet(wordDict.begin(), wordDict.end());  // 创建一个布尔型的 dp 数组,表示直到索引 i 的子字符串 s[0...i-1] 是否可以被字典中的单词组合而成。  vector<bool> dp(s.size() + 1, false);  // 空字符串可以被认为是可以被组合而成的,故 dp[0] 初始化为 true。  dp[0] = true;  // 遍历字符串 s 的每一个位置,计算到该位置是否可以被字典单词组合而成。  for (int i = 1; i <= s.size(); i++) {   // 遍历“背包”(即目标字符串的内容)  for (int j = 0; j < i; j++) {       // 遍历“物品”(即目标字符串的前缀子字符串)  // 从索引 j 开始,截取长度为 (i-j) 的字符串。  string word = s.substr(j, i - j);  // 检查当前子串 word 是否在字典中,并且 dp[j] 为 true,表示 [0...j) 这一子串可被组合而成。  if (wordSet.find(word) != wordSet.end() && dp[j]) {  dp[i] = true;  // 如果条件满足,设置 dp[i] 为 true (当前子串 [0...i) 可以被组合而成)  break;  // 找到可以组合方式后,结束本轮内部循环  }  }  }  // 返回 dp 最后一个位置的值,这反映了整个字符串是否可以被组合而成。  return dp[s.size()];  }  
};

1. 确定 dp 数组以及下标和对应值的含义

  • dp 数组:dp[i] 表示子字符串 s[0...i-1] 是否可以被字典中的单词组合而成。
  • 下标 i:表示字符串中位置 (从 1 开始),即上限是第i个子串。
  • dp[i] 值:布尔值,表明 s[0...i-1] 是否能够由字典中的单词组成。

2. 确定递推公式

  • 公式dp[i] = true if ∃ j (0 ≤ j < i), dp[j] && (s[j...i-1] ∈ wordSet)
  • 含义:如果从索引 j 到 i-1 的子串是字典中的单词,并且 s[0...j-1] 可以被组合而成,那 s[0...i-1] 也可以组合而成。

3. dp 数组如何初始化

  • dp[0] = true,因为空字符串可以被认为是已组合完成。

4. 确定遍历顺序

  • 外层循环:i 从 1 到 s.size(),代表当前考核的终止位置。
  • 内层循环:j 从 0 到 i-1,考察前 j 个字符是否可以被组合而成及其后的字符组合可能。

5. 举例推导 dp 数组

假设 s = "leetcode",wordDict = ["leet", "code"]。

  • dp = [true, false, false, false, true, false, false, false, true]
  • 解释推导:
    • dp[0] = true(空字符串被认为可以组合)
    • 从 j=0 到 j=3,"leet" 在 wordDict 中,所以 dp[4] = true
    • 从 j=4 到 j=7,对于 s[4..7],即 "code",也是在 wordDict 中,dp[8] = true

最终,dp[8] = true,说明整个字符串可以被组合而成。

if (wordSet.find(word) != wordSet.end() && dp[j]) {  
                    dp[i] = true;

而&&dp[j] 就是判断这个字符串是否连接上了,而不是单独的判断这个截取的字段存在不存在

dp[j - coins[i]] + 1有异曲同工之处

相关文章:

代码随想录day38|| 322零钱兑换 279完全平方数 139单词拆分

322零钱兑换 力扣题目链接 题目描述&#xff1a; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c…...

Cesium天空盒子(Skybox)制作(js代码)和显示

介绍 在Cesium中&#xff0c;星空背景是通过天空盒子方式&#xff08;6张图片&#xff09;来显示的&#xff0c;原生的图片分辨率太低&#xff0c;本项目用于生成天空盒子的6张图片。最终生成的6个图片大小约为500kb(每个)&#xff0c;格式为jpg&#xff0c;总共的恒星数目约为…...

JAVA中的缓冲流BufferedInputStream

在Java中&#xff0c;BufferedInputStream 是一种用于包装其他输入流&#xff08;如 FileInputStream&#xff09;的过滤流。它通过内部缓冲区机制提高了输入流处理的效率。使用缓冲流可以减少读取数据的次数&#xff0c;因为每次从输入流读取数据时&#xff0c;BufferedInputS…...

WindowContainerTransaction类详解(一)

1、WindowContainerTransaction是什么&#xff1a; windowContainerTransaction类的对象是用来存储对windowContainer的修改的一个集合&#xff0c;windowContainer。因为应用侧是无法直接操作windowContainer的&#xff0c;如果应用侧需要修改windowContainer的话&#xff0c…...

安装NFS扩展

#添加helm源 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner #创建个namespace(可选,主要是为了查看资源方便) kubectl create ns nfs-sc-default #使用helm安装(10.1.129.86为NFS地址,/home/data/nfs…...

计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务。 当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&#xff0c;都要使用协议栈中的运输层&#xff1b;而网络核心部分中的路由器在转发分组时只用到下三层的功能。 Q1&#xff1a;我们…...

代码随想录算法训练营第一天 | 二分查找

文章目录 Leetcode704 二分查找二分法的使用前提:区间选择其他注意事项 Leetcode27 移除元素解题思路:优化思路 Leetcode704 二分查找 链接&#xff1a;https://leetcode.cn/problems/binary-search/ 代码随想录: https://programmercarl.com/ 时间复杂度: O(logN) 空间复杂度:…...

python相关知识

1、注释 共有三种&#xff1a;#、 、””” ””” 2、数据类型 整数、浮点、字符串、布尔、列表、元组、集合、字典 num1 666、num2 3.14、t1 True、t2 False、 列表&#xff1a;list [1,2,3,4] 元组&#xff1a;tuple (11,aaa,ddd,3) 字典&#xff1a;dict {li…...

Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录

ANSI C程序中&#xff0c;用到了wcsrchr、wcsncpy_s、wcscat_s、wcscpy_s等几个字符串函数&#xff0c;但是编译时提示&#xff1a; 错误 LNK2001 无法解析的外部符号 _wcscat_s 查了挺多帖子&#xff0c;没有解决。 https://bbs.csdn.net/topics/250012844 解决VS编译…...

Java高并发处理机制

高并发处理的思路&#xff1a; 扩容&#xff1a;水平扩容、垂直扩容缓存&#xff1a;将基础的数据放入缓存进行处理使用SpringCloud的注册中心&#xff0c;分服务注册到同一个注册中心&#xff0c;服务器检测使用Spring的熔断操作&#xff0c;检测服务器的心跳那个正常随机跳转…...

7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符

目录 1 数据类型的分类 2 数据存储单位 2.1 位 2.2 字节 2.3 其余单位 3 整数类型 3.1 基本介绍 3.2 整型的类型 3.2.1 整数类型多样性的原因 3.2.2 整型类型之间的相对大小关系 3.3 整型注意事项 3.4 字面量后缀 3.5 格式占位符 3.6 案例&#xff1a;声明并输出…...

导游职业资格考试真题题库

导游职业资格考试真题题库 80.重庆有"雾都"之称。壁山区的()全年雾日多204天&#xff0c;堪称"世界之最"。 A.枇杷山 B.雾灵山 C.云雾山 D.四姑娘山 答案&#xff1a;C 81.我国最具热带海洋气候特色的地方为&#xff08;&#xff09;。 A.广西壮族…...

【Rust】使用开源项目搭建瓦片地图服务

本文通过获取在线和离线地图数据&#xff0c;使用开源Rust项目搭建瓦片地图服务&#xff0c;并使用DevExpress的MapControl控件使用自建地图服务 获取地图数据 获取地图数据有很多种方式&#xff0c;这里分别用在线和离线地图数据举例说明 在线下载瓦片地图 打开在线瓦片地…...

【面试宝典】mysql常见面试题总结(上)

一、MySQL 中有哪几种锁&#xff1f; MySQL中的锁机制是数据库并发控制的重要组成部分&#xff0c;它用于管理多个用户对数据库资源的访问&#xff0c;确保数据的一致性和完整性。MySQL中的锁可以根据不同的分类标准进行分类&#xff0c;以下是一些常见的分类方式及对应的锁类…...

第1章 初识C语言

第1章 初识C语言 1.1 C语言概述 1.1.1 C语言的发展历史 C语言的原型为ALGOL 60语言&#xff08;也称A语言&#xff09;。 1963年 剑桥大学将ALGOL 60语言发展成为GPL语言。 1967年 剑桥大学的Matin Richards简化GPL&#xff0c;产生了BGPL语言。 1970年 美国贝尔实验室的Ken…...

【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)

目录 一、如何计算旋转体体积&#xff1f;思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题&#xff0c;小试牛刀 定积分的应用中&#xff0c;有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式&#xff0c;有一种通法求解体积更不容易出错&#xff1a;二重…...

PHP移动端商城分销全平台全端同步使用

&#x1f4f1;【掌中购物新纪元&#xff1a;探索移动端购物商城系统的无限魅力】&#x1f6cd;️ &#x1f680; 随时随地&#xff0c;购物自由新体验 在这个快节奏的时代&#xff0c;移动端购物商城系统彻底颠覆了传统购物方式&#xff0c;让消费者享受到了前所未有的便捷与…...

TLE8386-2EL:汽车级DC-DC转换器中文资料书

描述 TLE8386-2EL是一款具有内置保护功能的低端感应升压控制器。该器件的主要功能是将输入电压升高&#xff08;升压&#xff09;到更大的输出电压。开关频率可从100kHz调整至700kHz&#xff0c;并可与外部时钟源同步。 TLE8386-2EL的独特功能可将关断电流消耗降至 <2μA。该…...

EasyRecovery17中文mac苹果电脑版数据恢复软件 永久免费破解版下载

&#x1f389; 数据丢失不再是噩梦&#xff01;EasyRecovery17中文版来拯救你的硬盘啦&#xff01; 各位小伙伴们&#xff0c;有没有遇到过重要文件一不小心就消失无踪的尴尬情况&#xff1f;别担心&#xff0c;今天就给大家种草一款神奇的工具——EasyRecovery17中文版&#x…...

Ubuntu 22.04 安装 VirtualBox7

Ubuntu默认库为VirtualBox-6版本 # 安装 VirtualBox-6 sudo apt update sudo apt install virtualbox# 卸载 VirtualBox-6 sudo apt remove --purge --auto-remove virtualbox virtualbox-6.1 1. 安装 VirtualBox-7 # 导入软件包密钥 curl https://www.virtualbox.org/downl…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...