详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
目录
题目背景
代码整体逻辑
变量初始化
逐位相加过程
处理最后进位
结果反转
示例演示
总结
在LeetCode中,有一道经典的算法题是实现两个字符串形式的非负整数相加,今天我们就来深入分析一段用C++实现该功能的代码,探究其背后的逻辑与实现细节。
题目背景
在实际编程中,我们经常会遇到处理超大整数的情况,由于编程语言中内置的数据类型(如 int 、 long long )存在表示范围的限制,无法直接存储和处理这些超大整数。此时,将整数以字符串的形式存储,并通过自定义的算法来实现相应的运算就显得尤为重要。本题就是要求我们实现两个用字符串表示的非负整数相加的功能。
代码整体逻辑
我们来看这段C++代码,它定义了一个名为 Solution 的类,其中包含一个 addStrings 成员函数,该函数用于实现两个字符串形式整数的相加。整体思路是从两个字符串的末尾开始逐位相加,同时处理进位的情况,最后将结果反转得到正确的顺序。
cppclass Solution {public:string addStrings(string num1, string num2) {int end1=num1.size()-1,end2=num2.size()-1;int next =0;string retstr;while(end1>=0||end2>=0){int val1=0,val2=0;if(end1>=0){val1=num1[end1]-'0'; }if(end2>=0){val2=num2[end2]-'0'; }int ret=val1+val2+next;if(ret>9){ret%=10;next=1;}else{next=0;}retstr+=(ret+'0');--end1;--end2;}if(next==1){retstr+='1';}reverse(retstr.begin(),retstr.end());return retstr;}};
变量初始化
end1 和 end2 分别用于记录 num1 和 num2 字符串的末尾索引,通过字符串的 size() 函数获取长度后减1得到。 next 变量用于记录进位,初始化为0,表示一开始没有进位。 retstr 用于存储最终的相加结果,初始化为空字符串。
逐位相加过程
cppwhile(end1>=0||end2>=0){int val1=0,val2=0;if(end1>=0){val1=num1[end1]-'0'; }if(end2>=0){val2=num2[end2]-'0'; }int ret=val1+val2+next;if(ret>9){ret%=10;next=1;}else{next=0;}retstr+=(ret+'0');--end1;--end2;}
- 获取当前位数字:在每次循环中,首先初始化 val1 和 val2 为0。然后通过条件判断,若 end1 或 end2 仍在有效索引范围内(即大于等于0),则将 num1 和 num2 对应位置的字符转换为数字。这里通过 -'0' 的操作实现字符到数字的转换,例如字符 '5' 减去字符 '0' ,在ASCII码表中,字符 '5' 的编码值减去字符 '0' 的编码值,就得到数字5。
- 计算当前位和及处理进位:将 val1 、 val2 与 next (进位)相加得到 ret 。若 ret 大于9,说明产生了进位,此时将 ret 对10取模得到当前位应保留的数字,同时将 next 设为1,表示有进位;若 ret 小于等于9,则没有进位,将 next 设为0。
- 存储结果:将计算得到的当前位数字 ret 转换回字符(通过 ret + '0' ),并添加到 retstr 字符串中。最后将 end1 和 end2 分别减1,指向下一位数字,继续循环。
处理最后进位
cppif(next==1){retstr+='1';}
循环结束后,有可能还存在进位(即 next 为1),此时需要在结果字符串 retstr 的末尾添加字符 '1' ,以表示最高位的进位。
结果反转
cppreverse(retstr.begin(),retstr.end());return retstr;
由于我们是从字符串末尾开始逐位相加,得到的结果字符串 retstr 是逆序的,所以需要使用 reverse 函数将其反转,使其成为正确的顺序,最后返回结果字符串。
示例演示
假设 num1 = "123" , num2 = "456" :
1. 初始化: end1 = 2 , end2 = 2 , next = 0 , retstr = "" 。
2. 第一次循环:
- val1 = num1[2] - '0' = '3' - '0' = 3 , val2 = num2[2] - '0' = '6' - '0' = 6 。
- ret = 3 + 6 + 0 = 9 , next = 0 , retstr = "9" , end1 = 1 , end2 = 1 。
3. 第二次循环:
- val1 = num1[1] - '0' = '2' - '0' = 2 , val2 = num2[1] - '0' = '5' - '0' = 5 。
- ret = 2 + 5 + 0 = 7 , next = 0 , retstr = "79" , end1 = 0 , end2 = 0 。
4. 第三次循环:
- val1 = num1[0] - '0' = '1' - '0' = 1 , val2 = num2[0] - '0' = '4' - '0' = 4 。
- ret = 1 + 4 + 0 = 5 , next = 0 , retstr = "579" , end1 = -1 , end2 = -1 。
5. 循环结束, next = 0 ,无需处理进位。
6. 反转 retstr 得到 "579" ,返回结果。
再假设 num1 = "99" , num2 = "1" :
1. 初始化: end1 = 1 , end2 = 0 , next = 0 , retstr = "" 。
2. 第一次循环:
- val1 = num1[1] - '0' = '9' - '0' = 9 , val2 = num2[0] - '0' = '1' - '0' = 1 。
- ret = 9 + 1 + 0 = 10 , ret %= 10 = 0 , next = 1 , retstr = "0" , end1 = 0 , end2 = -1 。
3. 第二次循环:
- val1 = num1[0] - '0' = '9' - '0' = 9 , val2 = 0 。
- ret = 9 + 0 + 1 = 10 , ret %= 10 = 0 , next = 1 , retstr = "00" , end1 = -1 , end2 = -1 。
4. 循环结束, next = 1 , retstr += '1' ,此时 retstr = "100" 。
5. 反转 retstr 得到 "100" ,返回结果。
C++实现
在编程过程中,将字符串转换为整数是一个常见的需求。但由于字符串的复杂性以及整数类型的取值范围限制,这个过程需要考虑诸多细节,尤其是溢出处理。本文将围绕一段C++代码,详细解析字符串转整数功能的实现逻辑以及溢出处理机制。
题目需求与代码功能概述
给定一个字符串,将其转换为对应的整数。同时需要处理字符串开头的空格、正负号,并且在转换过程中要考虑整数溢出的情况。上述代码通过定义 Solution 类中的 strToInt 函数实现了该功能,下面我们逐行分析代码的具体实现。
代码详细解析
cppclass Solution {
public:int strToInt(string str) {int i = 0, flag = 1;int res = 0; //默认flag = 1,正数while (str[i] =='') i++;
1. 初始化变量:
- i 用于记录当前处理到字符串的位置,初始化为 0,从字符串的第一个字符开始处理。
- flag 用于标记整数的正负,初始化为 1,表示正数。如果后续遇到负号, flag 会被赋值为 -1。
- res 用于存储转换后的整数结果,初始化为 0。
2. 跳过字符串开头的空格:通过 while 循环,只要当前字符是空格( str[i] =='' ),就将 i 向后移动一位,直到遇到非空格字符。
cppif (str[i] == '-') flag = -1;if (str[i] == '-' || str[i] == '+') i++;
1. 处理正负号:
- 首先判断当前字符是否为负号( str[i] == '-' ),如果是,将 flag 赋值为 -1,表示后续转换的整数为负数。
- 接着判断当前字符是否为负号或正号( str[i] == '-' || str[i] == '+' ),无论哪种情况,都将 i 向后移动一位,跳过正负号,准备处理后面的数字字符。
cppfor (; i < str.size() && isdigit(str[i]); i++) {if (res > INT_MAX / 10 || (res == INT_MAX / 10 && str[i] - '0' > 7)) //溢出判定return flag == 1? INT_MAX : INT_MIN;res = res * 10 + (str[i] - '0');}
1. 逐位转换数字字符:
- 通过 for 循环遍历字符串中剩余的字符。循环条件 i < str.size() && isdigit(str[i]) 表示只要当前位置在字符串范围内且当前字符是数字字符(通过 isdigit 函数判断,该函数在 <cctype> 头文件中定义,用于判断字符是否为 '0' 到 '9' 的数字字符),就继续执行循环体。
- 溢出判定:
- res > INT_MAX / 10 : INT_MAX 是 <climits> 头文件中定义的 int 类型的最大值。如果当前的结果 res 已经大于 INT_MAX / 10 ,那么当再乘以 10 并加上下一位数字时,必然会超过 int 类型能表示的最大值,导致溢出。
- res == INT_MAX / 10 && str[i] - '0' > 7 :当 res 等于 INT_MAX / 10 时,即使再乘以 10 恰好达到 INT_MAX ,但如果加上下一位数字后,仍可能超过 INT_MAX 。因为 INT_MAX 的最后一位数字是 7 (以十进制表示),所以当 res 等于 INT_MAX / 10 且下一位数字转换后的整数值大于 7 时,也会导致溢出。一旦检测到溢出,根据 flag 的值返回 INT_MAX (正数情况)或 INT_MIN (负数情况)。
- 数字转换: res = res * 10 + (str[i] - '0'); 将当前数字字符转换为对应的整数值并累加到 res 中。 str[i] - '0' 通过字符的ASCII码差值将字符形式的数字转换为整数,例如 '5' - '0' 得到整数 5 ,再通过 res * 10 将之前的结果扩大10倍,以正确构建整数。
cppreturn flag * res;}
};
1. 返回结果:循环结束后,将最终的结果 res 乘以 flag ,根据正负号调整结果,然后返回转换后的整数。
示例分析
1. 示例一:输入字符串 "42"
- 初始化: i = 0 , flag = 1 , res = 0 。
- 字符串无空格,直接处理。字符 '4' , res = 0 * 10 + ('4' - '0') = 4 ;字符 '2' , res = 4 * 10 + ('2' - '0') = 42 。
- 循环结束,返回 flag * res = 1 * 42 = 42 。
2. 示例二:输入字符串 " -42"
- 初始化: i = 0 , flag = 1 , res = 0 。
- 跳过开头的空格, i 移动到负号位置, flag = -1 , i 再向后移动一位。
- 字符 '4' , res = 0 * 10 + ('4' - '0') = 4 ;字符 '2' , res = 4 * 10 + ('2' - '0') = 42 。
- 循环结束,返回 flag * res = -1 * 42 = -42 。
3. 示例三:输入字符串 "2147483648" (超过 int 最大值)
- 初始化: i = 0 , flag = 1 , res = 0 。
- 逐位转换过程中,当处理到最后一位 '8' 时, res 等于 INT_MAX / 10 ,且 '8' - '0' > 7 ,触发溢出判定,返回 INT_MAX 。
总结
这段代码通过从字符串末尾逐位相加、处理进位以及结果反转的方式,巧妙地实现了两个字符串形式非负整数的相加。在处理大整数运算时,这种方法非常实用,它避免了数据类型表示范围的限制,为我们在实际编程中处理超大整数运算提供了有效的解决方案。实现了字符串到整数的转换,并严谨地处理了可能出现的溢出情况。在实际开发中,处理数据类型转换时,考虑边界条件和溢出情况是保证程序正确性和稳定性的关键。通过对这段代码的分析,我们不仅掌握了字符串转整数的实现方法,也加深了对整数溢出处理的理解。同时,通过对代码的详细分析,我们也能更好地理解和掌握字符串处理与基础数学运算结合的编程技巧。
相关文章:
详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
目录 题目背景 代码整体逻辑 变量初始化 逐位相加过程 处理最后进位 结果反转 示例演示 总结 在LeetCode中,有一道经典的算法题是实现两个字符串形式的非负整数相加,今天我们就来深入分析一段用C实现该功能的代码,探究其背后的逻辑与…...
vue学习笔记06
学习的课程地址:老杜Vue视频教程,Vue2,Vue3实战精讲,一套通关vue_哔哩哔哩_bilibili 1、vue程序初体验 2、vue核心技术(基础) 3、Vue组件化 前面参见: vue学习笔记01 vue学习笔记02 vue学习笔记03 vue学习笔记…...
如何查看自己抖音的IP属地?详细教程及如何修改
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答,帮助您快速了解相关信息: 一、如何查看抖音账号的IP属…...
熟悉Linux下的编程
可能 目录 熟悉Linux下Python编程的含义及与非Linux环境编程的区别 一、核心含义解析 二、与非Linux环境的关键区别 三、典型应用场景对比 四、能力培养建议 openfoem的下载之路: 方法一:使用cd命令 方法二:使用快捷方式 方法三&am…...
Uniapp:获取当前定位坐标
目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中,会出现打卡、定位当前位置的功能,那我们如何获取当前位置呢?这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...
GitHub实用手册
文章目录 一、GitHub 的定义二、GitHub 的主要功能三、GitHub 的优势四、GitHub 的使用相关工具GitSourcetreeGithub-Desktop 一、GitHub 的定义 GitHub 是一个基于 Git 的分布式版本控制系统,它允许开发者在本地和远程仓库中管理代码版本,支持多人协作…...
【从零实现高并发内存池】Central Cache从理解设计到全面实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)
前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划,今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7),下个月就是 RC1,紧接着就是 GA!,对于我们 Java 开发者来说,这绝对是个值得关注的好消息! 但是对于 Java 学习者来说,…...
如何从 GitHub 镜像仓库到极狐GitLab?
最近 GitHub 封禁中国用户的事情闹得沸沸扬扬,虽然官方发布的报道说中国用户被限制登录是因为配置错误导致,已经撤回了更新,中国用户已经可以正常使用。但是这就像横在国内开发者和企业头上的“达摩克利斯之剑”。为了避免 GitHub 不可用而带…...
大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机
摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5,该产品集成地瓜机器人 RDK X5 开发者套件,深度整合双方在硬件研发与智能计算领域的技术优势,实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...
在Android Studio中,`Settings`里的Gradle路径、环境变量以及`gradle - wrapper.properties`文件关联
在Android Studio中,Settings里的Gradle路径、环境变量以及gradle - wrapper.properties文件关联 Android Studio中Settings里的Gradle路径 在Android Studio的Settings(Preferences ) -> Build, Execution, Deployment -> Build Tools -> Gradle 中: Use defau…...
用react 写一个可左右滑动的柱状图
效果图 目录 效果图 ✅ 项目结构 🚀 创建项目步骤 1️⃣ 打开终端或命令行,创建新项目: 2️⃣ 安装 recharts 图表库: 3️⃣ 替换默认代码: 4️⃣ 启动项目: ✅ 项目结构 scrollable-bar-chart/ ├…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——MIPI LCD测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——MIPI LCD测试4.3 MIPI LCD测试4.3.1 使…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS485串口测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS485串口测试 第四章 ATK-DLMP257B功能…...
Sui 的工具生态简化了游戏开发者的 Web3 集成流程
希望利用 Web3 独特协同效应的游戏开发者,常常在强大的区块链功能与流畅的游戏体验之间难以权衡。许多区块链方案要求大幅重构游戏基础架构,增加了开发难度,甚至需要学习全新的智能合约语言。而 Sui 通过直观的工具消除这一阻力,使…...
Vue 3 的组合式 API-hooks
Vue 3 的组合式 API 组合式 API 是 Vue 3 的核心特性之一,它允许开发者将组件的逻辑拆分为可复用的函数。组合式 API 的主要特点是 逻辑复用:将逻辑提取到独立的函数中,方便在多个组件中复用。组织清晰:将相关的逻辑分组&#x…...
AOSP Android14 Launcher3——底部任务栏Taskbar详解
前言:Launcher3中底部Taskbar和Navbar,或者说中文里面的术语导航栏,这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看,Taskbar就是任务栏,任务栏是Launcher3中一个重要的组件,尤其…...
QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(五)QGraphicsView的缩放和移动
QGraphicsView自带滚动条的显示,但是大部分的需求样式都不需要滚动条,并且要通过鼠标来控制视图的缩放和移动。需要重写QGraphicsView实现。 一、相关函数 1.scale void QGraphicsView::scale(qreal sx, qreal sy) 按(sx,sy&…...
算法——果蝇算法
果蝇算法(Fruit Fly Optimization Algorithm,FOA)是一种受果蝇觅食行为启发而开发的群智能优化算法。以下从算法原理、算法流程、算法特点等方面为你详细讲述: 算法原理 果蝇本身具有优于其他物种的嗅觉和视觉。在觅食过程中&am…...
重返JAVA之路——图书管理系统
目录 一、功能介绍 二、设计模块 三、系统构建 1.book模块 2.operation模块 输入循环和验证 查找图书并处理借阅状态 未找到图书的处理 查找删除图书功能实现 未找到图书的处理 图书查找与归还 work方法实现图书信息输出 3. user模块实现 四、主菜单 一、功能介绍 …...
【16】数据结构之基于树的排序算法篇章
目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想:从待排序的序列中选出最大值或最小值,交换该元素与待排序序列的头部元素,对剩下的元…...
Uniapp:确认框
目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中,会经常出现删除数据的情况,如果直接删除的话,可能会存在误删,用户体验不好,所以需要增加一个消息提示,提醒用户是否删除。 二…...
pyswmm实现洪涝模拟
准备好.inp文件作为SWMM模型输入,调用pyswmm模块执行模拟,返回节点溢流量(flooding)作为积水量的初步表征。 代码: from pyswmm import Simulation, Nodes import pandas as pddef run_swmm_simulation(inp_file, ou…...
My Diary Pro:记录生活,珍藏回忆
我的日记My Diary Pro是一个非常好用的手机日记软件,可以使用它来记录每日生活日常,不少的用户可能都知道在生活之中可能会发生一些比较的重要的事情,实际上我们都可以将这些内容记录下来。包括个人观点,旅行游记,心情…...
CSRF(跨站请求伪造)漏洞概述
CSRF(跨站请求伪造)漏洞概述 一、什么是 CSRF 攻击者诱导已登录用户在不知情的情况下,对受信任网站执行未授权操作。 简单说:你登录着网站A,攻击者诱导你访问某个恶意链接,使网站A误以为是你自己发出的操作(比…...
[Java实战经验]对象拷贝
目录 谨慎重写clone方法重写clone()支持深拷贝带来的问题 合适的深拷贝 首先,对于不可变的类,我们不应该实现Cloneable接口,因为不可变类不需要拷贝,直接引用即可,实现Cloneable接口只会造成浪费。 对于Java可变类来说…...
WAF防火墙:构筑Web应用安全的“隐形护盾”
在数字化时代,Web应用已成为企业服务与用户交互的核心窗口。然而,随之而来的SQL注入、跨站脚本攻击(XSS)、DDoS攻击等威胁,时刻考验着网站的安全防线。Web应用防火墙(WAF)作为关键防护工具&…...
开源智慧巡检——无人机油田AI视频监控的未来之力
油田巡检,关乎能源命脉,却常受困于广袤地形、高危环境和人工效率瓶颈。管道泄漏、设备故障、非法闯入——这些隐患稍有疏忽,便可能酿成大患。传统巡检已无法满足现代油田对安全与效率的需求,而无人机油田巡检系统正以智能化之力重…...
【2025年泰迪杯数据挖掘挑战赛】B题 完整论文 模型建立与求解
目录 2025年泰迪杯数据挖掘挑战赛 B题完整论文:建模与求解 Matlab代码一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 三、数据预处理**问题一:志愿者身体活动信息的统计分析****问题二:身体活动MET值的实时估计模型构建**…...
Chromium 134 编译指南 macOS篇:安装 Xcode(二)
1. 引言 在Chromium开发的征程中,为macOS平台构建正确的开发环境是成功编译的关键基础。继上一篇系统环境准备后,本文将重点介绍Xcode的安装与配置过程。作为macOS上不可或缺的集成开发环境(IDE),Xcode为Chromium 134的编译提供了必要的编译…...
软件定义网络(SDN):重塑未来网络的革命性架构
在当今数字化时代,网络已成为企业、云计算、5G通信和物联网(IoT)的核心基础设施。然而,传统网络架构由于其封闭、静态和分布式的特性,难以应对快速变化的业务需求。软件定义网络(Software-Defined Networki…...
Java虚拟机面试题:类加载机制
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
OCCT 入门(3)核心模块与架构
文章目录 一、核心模块与架构1、架构概述2、核心模块3、数据流转3.1、几何创建(Geometric Primitives)3.2、拓扑构建(Topology Construction)3.3、模型处理(Modeling Algorithms)3.4、可视化(Vi…...
MAC-需求:10万订单异步执行库存扣减、短信通知。
批量任务并行处理 实现,通过拆分任务、异步执行和线程池管理提升处理。 10万订单异步处理方案设计 基于图中代码的批量处理框架,结合订单业务需求,以下是 库存扣减与短信通知的异步实现: 1. 代码实现(基于原有框架改造) @Service public…...
ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 在 Java 开发中,集合类的选择直接影响程序的性能和代码的可维护性。不同的数据结构适用于不同的场景,盲目使用可能导致内存浪费、性能…...
使用Form.List且有Select组件
当在使用Form.List组件,且组件中有Select选项时,针对每一次选择,都要过滤掉那些已经选择过的选项,可能遇到的问题: 直接过滤会将每一个Select中的options选项都过滤掉,无法正常展示选择的选项 解决办法&a…...
大数据学习笔记
文章目录 1. 大数据概述1.1 大数据的特性1.2 大数据技术生态1.2.1 Hadoop 的概念特性1.2.2 Hadoop生态圈 — 核心组件与技术栈1.2.3 Hadoop生态演进趋势 2. 数据处理流程与技术栈2.1 数据采集2.1.1 日志采集工具2.1.2 实时数据流2.1.3 数据迁移 2.2 数据预处理2.2.1 批处理2.2.…...
Obsidian 文件夹体系构建 -INKA
Obsidian 文件夹体系构建 -INKA 本篇文章主要分享一下自己折腾学习实践过的 INKA 框架方法。原地址:Obsidian文件夹体系构建–INKA。 文章目录 Obsidian 文件夹体系构建 -INKA前言INKA简介INKA 理论最佳实践实际应用 反思 前言 上文 Obsidian文件夹体系构建-ACCES…...
QML与C++:基于ListView调用外部模型进行增删改查(性能优化版)
目录 引言相关阅读工程结构数据模型设计DataModel 类ContactProxyModel 类 为什么使用QSortFilterProxyModel?应用初始化与模型连接UI实现 性能分析与优化运行效果扩展思考总结下载链接 引言 在上一篇中介绍了基于ListView调用外部模型进行增删改查,本文…...
集合常用Stream操作
1、中间操作 filter()过滤 将流中的元素筛选出满足条件的元素 List<String> list Arrays.asList("abc","test","demo","frse","fesfes"); list.stream().filter(s -> s.startsWith("f")).forEach(Sy…...
ReactNative中处理安全区域问题
RN原生方案不支持android系统,所以在此使用三方组件react-native-safe-area-context 1、安装插件 yarn add react-native-safe-area-context2、安装完成后直接yarn ios可能会失败,需要先 cd ios && pod install && cd ..出来再继…...
二、The Power of LLM Function Calling
一、Function Calling 的诞生背景 1. 传统LLM的局限性 静态文本生成的不足:早期的LLM(如早期版本的ChatGPT)主要依赖预训练的知识库生成文本,但无法直接与外部系统或API交互。这意味着它们只能基于历史数据回答问题,…...
贪心算法day10(无重叠区间)
1.无重叠区间 435. 无重叠区间 - 力扣(LeetCode) 思路: 代码: class Solution {public static int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(v1,v2)->{return v1[0]-v2[0];});int left interva…...
reactive 解构赋值给 ref
在 Vue 3 中,当你执行以下操作时: javascript const applyBasicInfo ref(); applyBasicInfo.value { ...props.applyBasicInfo }; 最终的 applyBasicInfo.value 是响应式对象,但与原对象 props.applyBasicInfo 的响应性完全独立…...
MongoDB简单用法
图片中 MongoDB Compass 中显示了默认的三个数据库: adminconfiglocal 如果在 .env 文件中配置的是: MONGODB_URImongodb://admin:passwordlocalhost:27017/ MONGODB_NAMERAGSAAS💡 一、为什么 Compass 里没有 RAGSAAS 数据库?…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい)
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい) 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~んです 復習(ふくしゅう)(2)いただけませんか 復習(ふくしゅう)(3)可能形(かのうけい)(1)1グループ:(2)2グループ…...
Windows 下 MongoDB ZIP 版本安装指南
在开发和生产环境中,MongoDB 是一种非常流行的 NoSQL 数据库,以其灵活性和高性能而受到开发者的青睐。对于 Windows 用户来说,MongoDB 提供了多种安装方式,其中 ZIP 版本因其灵活性和轻量级的特点,成为很多开发者的首选…...
万字长篇————C语言指针学习汇总
经过一段时间的学习,我们已经接触到了C语言的很多知识了。不过目前我们接下来我们要接触C语言中一个最大的“门槛”:指针。 什么是指针? 在介绍指针之前,我们首先要明白变量与地址之间的关系。 举一个生活中的案例:一…...
day29图像处理OpenCV
文章目录 一、图像预处理6 图像色彩空间转换6.3灰色/BGR/HSV相互转化 7 彩图转灰图方法7.1 最大值法7.2 平均值法7.3 加权均值法7.4 案例 8 图像二值化处理8.1 阈值法(typecv2.THRESH_BINARY)8.2 反阈值法(THRESH_BINARY_INV)8.3 截断阈值法(THRESH_TRUNC)8.4 低阈值零处理(THR…...