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

LeetCode Easy|【415. 字符串相加】

力扣题目链接
题目本身难度不大,但是后续的一些补充内容还是值得搞清楚的

主要的逻辑如下:

  1. 其实本题的目的就是让我们来模拟我们的竖式加法。所以很直观的一个想法就是使用双指针:分别指向两个 num 的末尾。
  2. 随后就会产生一些问题:如何在不进行字符串->整数形式来完成计算:
int x = '9' - '0';

这样就可以完成字符串到整数的隐式转换。

  1. 然后第二个问题,如何完成进位:
    这里就需要和我们的竖式加法一样的逻辑,定义一个 add 来表示进位,每次在按位进行加法的时候,我们需要把这个进位也计算进去。并且每次计算我们也需要计算出当前位是否有进位
int add = 0;
int res = x + y + add;
int add = res / 10;
  1. 最后一个问题,如何处理两个数之间位数不同?
    我们从后往前遍历 num 的时候,如果有位数不同,说明某一个指针已经指向了负数,此时我们就在该位置补0,这个想法也是完全按照竖式加法的思路来的。
int x = i >= 0 ? nums1[i] : 0;
int y = j >= 0 ? nums2[j] : 0;

所以总体CPP代码如下:

class Solution {
public:string addStrings(string num1, string num2) {int i = num1.length() - 1, j = num2.length() - 1, add = 0;string ans = "";while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int res = x + y + add;add = res / 10;ans.push_back('0' + res % 10);i--;j--;}reverse(ans.begin(), ans.end());return ans;}
};

补充题:字符串相减(大数相减)

来源于:补充题:字符串相减(大数相减)


首先我们要考虑到两个非负整数相减的结果可能为负。

因此,首先比较两个数的大小。

如果小减大,我们可以将两个参数调换一下位置执行减法,在结果前填上负号即可。(结果为 0 时不加负号)

string subString(string num1, string num2) {string res;if (isLess(num1, num2)) {res = sub(num2, num1);if (res != '0') res.insert(0, '-');} else { res = sub(num1, num2); }return res; 
}

我们可以看到我们需要实现两个函数: isLess(int, int)sub(int, int)

isLess(int, int)

其实思路很简单,长度更长的字符串数一定打;当长度一样的就去比较字典序即可:

bool isLess(string a, string b) {if (a.size() == b.size()) return a < b;return a.size() < b.size();
}

sub(int, int)

其实和加法的差别不大,主要就是把 进位改成 借位

string sub(string a, string b) {string res = "";int i = a.size() - 1, j = b.size() - 1, borrow = 0;while (i >= 0 || j >= 0) {int x = i >= 0 ? (a[i] - '0') : 0; //字符转整数int y = j >= 0 ? (b[j] - '0') : 0; //字符转整数int z = (x - borrow - y + 10) % 10;}
}

好了,写到这里我们不得不聊一聊关键写法之一:
z = (x - borrow - y + 10) % 10
这样的写法更加简洁,相当于:

if (x - borrow - y + 10 < 0) {z = (x - borrow - y + 10) % 10
} else z = x - borrow - y;

好了,我们接着写代码

string sub(string a, string b) {string res = "";int i = a.size() - 1, j = b.size() - 1, borrow = 0;while (i >= 0 || j >= 0) {int x = i >= 0 ? (a[i] - '0') : 0; //字符转整数int y = j >= 0 ? (b[j] - '0') : 0; //字符转整数int z = (x - borrow - y + 10) % 10;res.push_back();borrow = x - borrow - y < 0 ? 1 : 0;i--, j--;}reverse(res.begin(), res.end());//删除前导0,注意边界是 res.size() - 1!,防止当res为"0000"时,删为""的清空int pos = 0;for (pos = 0; pos < res.size() - 1; pos++) {if (res[pos] != '0') break;}return res.substr(pos);
}

这里再谈一个重点:删除前导0
例如,当121-120=001,需要将前面的0删除,得到最终结果1。注意121-121=000这种情况,不要把所有0都删了!

相关文章:

LeetCode Easy|【415. 字符串相加】

力扣题目链接 题目本身难度不大&#xff0c;但是后续的一些补充内容还是值得搞清楚的 主要的逻辑如下&#xff1a; 其实本题的目的就是让我们来模拟我们的竖式加法。所以很直观的一个想法就是使用双指针&#xff1a;分别指向两个 num 的末尾。随后就会产生一些问题&#xff1a…...

RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器

在深圳的一家科技初创公司&#xff0c;首席技术官李梅正在向她的团队展示一个令人兴奋的新项目。“看这个&#xff0c;” 她指着屏幕上的实时演示说&#xff0c;“我们刚刚用公司的技术文档训练了一个 AI 助手&#xff0c;它现在可以回答任何关于我们产品的问题&#xff0c;而且…...

九大原则,轻松构建个人高效SOP

1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!&#xff09; 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景&#xff0c;目标&#xff0c;愿景 C - Complication 冲突 讲卡点&#xff0c;讲冲突 Q - Question 疑问-问题 这些冲…...

Airtest的demo实现多设备并行

Airtest的demo实现多设备并行 它实现是的获取adb连接上的所有设备&#xff0c;然后在每一台设备上跑给定的测试用例&#xff0c;跑完之后生成单机的测试报告&#xff0c;最后再汇总这些单机测试报告的结果&#xff0c;形成汇总&#xff08;聚合&#xff09;报告&#xff1a; 同…...

社区养老服务小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;服务人员管理&#xff0c;服务产品管理&#xff0c;服务预约管理&#xff0c;服务状态管理&#xff0c;服务退订管理&#xff0c;活动管理&#xff0c;视频管理 微信端账号功能包…...

Interceptor拦截器开发

因为1登录后的接口都需要token验证代码,会出现重复代码;2当前的接口不防刷,会被恶意攻击 所以在controller层增加请求拦截,如果你的token不合法,就不让你做后续的处理了 拦截器的作用是什么 作用: 1、对controller层代码的访问进行拦截,合法的请求,那此层代码就处理,反…...

美团 AIGC产品经理面经(已拿 offer)

背景&#xff1a;211本科毕业&#xff0c;毕业之后在北京一家中型电商公司做了3年商家后台产品经理&#xff0c;目前通过老薛的朋友关系拿到了美团的offer。 目前还有几家在面试流程中&#xff0c;继续加油&#x1f4aa; 美团AIGC产品面经-业务面 &#x1f4a5;1、自我介绍&a…...

@RequestBody与@RequestParam

RequestBody会将请求体中的数据&#xff0c;转换成对象.最主要的是RequestBody就是要返回Json的字符串&#xff01;&#xff01;&#xff01; RequestParam会从http请求查询参数中提取数据&#xff01; RequestParam和RequestBody是Spring Framework中用于处理HTTP请求的注解…...

vmware上,虚机经常丢失网卡。导致无法上网。

1、winR 输入 services.msc 2、重启这两个服务。 VMware NAT service和VMware DHCP service...

git 鉴权失败

这条错误信息通常出现在使用Git进行远程操作时&#xff0c;比如克隆仓库、拉取更新或推送代码。错误的含义是&#xff1a; HTTP Basic: Access denied&#xff1a;访问被拒绝。The provided password or token is incorrect&#xff1a;提供的密码或令牌不正确。Your account …...

[C++] 容器适配器:深入理解Stack与Queue的底层原理

文章目录 容器适配器简介deque的缺陷为什么使用deque作为stack和queue的底层默认容器 stack和queue的简单讲解Stack&#xff08;栈&#xff09;栈的操作图示栈的相关接口 Queue&#xff08;队列&#xff09; Stack和Queue的模拟实现Stack&#xff08;栈&#xff09;作为容器适配…...

Eclipse maven 的坑

在使用 eclipse 时&#xff0c; eclipse 的右下角 一直在提示 “JPA java change event handler” &#xff0c;eclipse使用起来很卡&#xff0c;解决办法 问题描述&#xff1a; 在使用 eclipse时&#xff0c; eclipse 的右下角 一直在提示 “JPA java change event handler”…...

多模态视觉大语言模型——LLaVA

论文题目:Visual Instruction Tuning 论文地址:https://arxiv.org/abs/2304.08485 github: https://github.com/haotian-liu/LLaVA 1. Abstract 本文首次尝试使用GPT-4生成多模态指令数据,并基于这些数据训练了LLaVA(Large Language and Vision Assistant)模型,这是一种结…...

服务注册到nacos上,不能点击下线的问题处理

nacos不能下线&#xff1a; 修改 /usr/local/mid/nacos/data 文件夹下 protocol 文件重命名为 protocol_bak&#xff0c;然后再重启nacos nacos单机启动命令&#xff1a;cd sh startup.sh -m standalone nginx启动命令&#xff1a;cd /usr/local/mid/nginx/sbin ./…...

未来3-5年,哪些工作会被AI取代

一篇由高盛经济学家约瑟夫布里格斯 &#xff08;Joseph Briggs&#xff09;和德维西科德纳尼 &#xff08;Devesh Kodnani&#xff09;撰写的报告指出&#xff0c;全球预计将有3亿个工作岗位被生成式AI取代。 报告称&#xff1a;“最近出现的生成式人工智能将降低劳动力成本和…...

鸿蒙系统开发【网络管理】

网络管理 介绍 此Demo展示如何查询网络详情、域名解析、网络状态监听等功能。 效果预览&#xff1a; 使用说明&#xff1a; 1.启动应用&#xff0c;在点击检查网络、网络详情、网络连接信息后&#xff0c;展示对应的信息&#xff1b; 2.在域名解析的模块下&#xff0c;输入…...

nginx如何处理请求

nginx如何处理请求 注&#xff1a;内容翻译自Nginx官网文档 How nginx processes a request。 基于名称的虚拟服务器 nginx首先要决定哪个服务器应该处理请求。让我们从一个简单的配置开始&#xff0c;三个虚拟服务器都监听在端口*:80: server {listen 80;server_name e…...

换地不换IP?揭秘微博IP地址的奥秘

在这个信息飞速传递的时代&#xff0c;社交媒体成为我们生活中不可或缺的一部分。微博&#xff0c;作为其中的佼佼者&#xff0c;不仅是我们获取资讯的重要渠道&#xff0c;也是展现自我、分享生活的重要平台。然而&#xff0c;你有没有遇到过这样的情况&#xff1a;明明已经换…...

数据库事务处理技术——故障恢复

1. 数据故障恢复的宏观思路 我们知道DBMS是利用内存&#xff08;主存&#xff09;和外存&#xff08;辅存&#xff09;这样的存储体系进行数据库的管理&#xff0c;其中内存也就是我们常说的缓存是易失的。而事务时DBMS对数据库进行控制的基本单元&#xff0c;宏观上是由程序设…...

Java零基础之多线程篇:性能考虑篇

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...