Leetcode刷题详解——字符串相加

news2024/11/17 16:28:17

1. 题目链接:415. 字符串相加

2. 题目描述:

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零

3. 解法:

3.1 算法思路:

请添加图片描述

  1. 首先,获取两个输入字符串的长度,分别存储在变量x1和x2中。
  2. 初始化一个空字符串s,用于存储结果。
  3. 初始化一个变量val,用于记录进位。
  4. 使用while循环进行以下操作,直到x1、x2都小于0且val等于0为止:
    • 判断x1是否大于等于0,如果是,则将num1[x1]减去字符’0’,得到y1的值;否则,将y1设为0。
    • 判断x2是否大于等于0,如果是,则将num2[x2]减去字符’0’,得到y2的值;否则,将y2设为0。
    • 将y1、y2和val相加,得到num的值。
    • 将num除以10取余数,加上字符’0’,得到当前位的数字,并将其添加到字符串s的末尾。
    • 将num除以10取整,更新val的值。
    • 将x1和x2的值减1,以便处理下一位数字。
  5. 使用reverse函数将字符串s反转,使其按照正确的顺序排列。
  6. 返回字符串s作为结果。

这个算法的思路是通过逐位相加的方式,将两个字符串表示的整数相加。在每次循环中,从字符串的末尾开始,依次取出每一位数字,并将其与进位值相加,得到当前位的结果。然后将结果除以10取余数,得到当前位的数字,并将其添加到结果字符串中。最后,将结果字符串反转,得到最终的相加结果。

3.2 C++算法代码:

class Solution {
public:
    // 定义一个函数addStrings,接收两个字符串参数num1和num2,返回一个字符串
    string addStrings(string num1, string num2) {
        // 获取num1和num2的长度减1,分别赋值给x1和x2
        int x1=num1.length()-1;
        int x2=num2.length()-1;
        // 定义一个空字符串s,用于存储结果
        string s="";
        // 定义一个变量val,初始值为0,用于记录进位
        int val=0;
        // 当x1大于等于0、x2大于等于0或val不等于0时,执行循环
        while(x1>=0||x2>=0||val!=0)
        {
            // 如果x1大于等于0,则将num1[x1]减去字符'0'的值赋给y1;否则,将y1设为0
            int y1=x1>=0?num1[x1]-'0':0;
            // 如果x2大于等于0,则将num2[x2]减去字符'0'的值赋给y2;否则,将y2设为0
            int y2=x2>=0?num2[x2]-'0':0;
            // 将y1、y2和val相加,得到当前位的结果
            int num=y1+y2+val;
            // 将当前位的结果除以10取余数,加上字符'0',然后添加到字符串s的末尾
            s.push_back(num%10+'0');
            // 将当前位的结果除以10取整,赋值给val
            val=num/10;
            // x1和x2都减1,以便处理下一位数字
            x1--;
            x2--;
        }
        // 将字符串s反转,使其按照正确的顺序排列
        reverse(s.begin(),s.end());
        // 返回字符串s作为结果
        return s;
    }
};

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

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

相关文章

python格式化内容

1.字符串格式化: 定义列表 [{"姓名": "张三", "年龄": 18, "性别": "男"}, {"姓名": "里斯李四李斯", "年龄": 18, "性别": "男"}, {"姓名": "斯托夫斯基…

HarmonyOS--ArkTS(1)--基本语法(1)

目录 基本语法概述 声明式UI描述 自定义组件 创建自定义组件 自定义组件的结构--struct &#xff0c;Component&#xff0c;build()函数 生命周期 基本语法概述 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、C…

[ROS2] --- 通信接口

1 通信接口的定义 通信并不是一个人自言自语&#xff0c;而是两个甚至更多个人&#xff0c;你来我往的交流&#xff0c;交流的内容是什么呢&#xff1f;为了让大家都好理解&#xff0c;我们可以给传递的数据定义一个标准的结构&#xff0c;这就是通信接口。 ROS的通信系统&am…

CleanMyMac X2024免费许可证(激活教程)

CleanMyMac X是一款流行的系统优化工具&#xff0c;专为Mac用户设计。它可以帮助用户清理Mac系统中的垃圾文件、卸载不需要的程序、加速Mac性能以及保护Mac系统的安全。 一、简介 CleanMyMac X是一款功能强大的系统优化工具&#xff0c;它可以帮助用户清理Mac系统中的垃圾文件…

时间序列预测 — GRU实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 数据集简介 1.2 导入库文件 1.3 数据集处理 1.4 训练数据构造 2 模型训练与预测 2.1 模型训练 2.2 模型多步预测 2.3 预测可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集7&#xff1a;常州普利司通光伏数据集&#xff08;下载链接&…

C语言精选——选择题Day41

第一题 1. 有以下程序段&#xff1a; char *p, *q; p (char *)malloc(sizeof(char) * 20); q p; scanf("%s %s", p, q); printf("%s %s\n", p, q); 若从键盘输入&#xff1a;abc def↙&#xff0c;则输出结果是&#xff08; &#xff09; A&#xff1a;d…

系统架构设计师教程(一)绪论

系统架构设计师 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1、软件架构常用分类2、系统架构的常用建模方法 1.2 系统架构设计师概述1.3 如何成为一名好的系统架构设计师 1.1 系统架构概述 自1946年第一台计算机诞生以来&#xff0c;计…

【C语言】函数调用及创建,并将数组传参到函数

&#x1f3a5; 岁月失语唯石能言的个人主页 &#x1f525;个人栏专&#xff1a;秒懂C语言 ⭐若在许我少年时&#xff0c;一两黄金一两风 目录 前言 一、函数的概念 二、库函数 2.1 标准库和头文件 2.2库函数的使用方法 2.2.1功能 2.2.2库函数的头文件 2.2…

看图学源码之 Atomic 类源码浅析二(cas + 分治思想的原子累加器)

原子累加器 相较于上一节看图学源码 之 Atomic 类源码浅析一&#xff08;cas 自旋操作的 AtomicXXX原子类&#xff09;说的的原子类&#xff0c;原子累加器的效率会更高 XXXXAdder 和 XXXAccumulator 区别就是 Adder只有add 方法&#xff0c;Accumulator是可以进行自定义运算方…

Redis如何做内存优化?

Redis如何做内存优化&#xff1f; 1、缩短键值的长度 缩短值的长度才是关键&#xff0c;如果值是一个大的业务对象&#xff0c;可以将对象序列化成二进制数组&#xff1b; 首先应该在业务上进行精简&#xff0c;去掉不必要的属性&#xff0c;避免存储一些没用的数据&#xff1…

idea__SpringBoot微服务07——Thymeleaf

Thymeleaf 一、Thymeleaf入门二、Thymeleaf语法————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 新依赖&#xff1a;Thymeleaf的 <!--thymeleaf--> <dependency…

uniapp生成条形码?

首先先在插件市场找到条形码 链接&#xff1a;https://ext.dcloud.net.cn/search?q 下载到项目里面 三、在pages.json中写入以下&#xff1a; 四、在html页面 这样就已经差不多了 条形码可以出来了

java学习part41泛型

164-泛型-泛型的理解及其在集合、比较器中的使用_哔哩哔哩_bilibili 1.泛型 泛型可以加&#xff0c;加了不用也可以 2.例子 2.1List泛型 2.2Map泛型 新特性var 类似c的auto&#xff0c;可以根据后面赋值推断类型&#xff0c;在这种类型很复杂的时候可以提高可读性 3.自定义泛型…

人工智能AIGC培训讲师叶梓介绍及AI强化学习培训提纲

叶梓&#xff0c;上海交通大学计算机专业博士毕业&#xff0c;高级工程师。主研方向&#xff1a;数据挖掘、机器学习、人工智能。历任国内知名上市IT企业的AI技术总监、资深技术专家&#xff0c;市级行业大数据平台技术负责人。个人主页&#xff1a;大数据人工智能AI培训讲师叶…

git stash 对当前分支修改的内容进行暂存

我们在开发的时候往往会遇到这种情况, 在一个分支开发,写了不少内容,但是突然来了一个紧急的需求需要切换分支,去做这个需求,但是当前的分支又因为没有开发完成,不想形成一条无效的commit记录,这时我们就到暂存上场了 git stash 暂存 // 切分支之前 对当前分支修改的内容进行暂…

【算法通关村】链表反转经典问题解析

&#x1f6a9;本文已收录至算法学习之旅 一.基础反转 我们通常有两种方法反转链表&#xff0c;一种是直接操作链表实现反转操作&#xff0c;一种是建立虚拟头节点辅助实现反转操作。 力扣习题链接&#xff1a;206. 反转链表 (1) 直接操作实现反转 我们需要一个变量pre来保…

13. MySQL 日志

目录 错误日志 binlog日志 概述 日志格式 查询日志 慢查询日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#…

51单片机独立按键以及矩阵按键的使用以及其原理--独立按键 K1 控制 D1 指示灯亮灭以及数码管显示矩阵按键 S1-S16 按下后键值 0-F

IO 的使用–按键 本文主要涉及8051单片机按键的使用&#xff0c;包括独立按键以及矩阵按键的使用以及其原理&#xff0c;其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…

MobaXterm成功连接到开发环境后,过一段时间会自动断开。

问题现象 MobaXterm成功连接到开发环境后&#xff0c;过一段时间会自动断开。 原因 配置MobaXterm工具时&#xff0c;没有勾选“SSH keepalive”或专业版MobaXterm工具的“Stop server after”时间设置太短。

8. MySQL 触发器

目录 概述 定义 触发器特性&#xff1a; 基础操作 创建触发器 NEW和OLD 其他操作 查看触发器 删除触发器 注意事项 概述 定义 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是触…