字符串相加(leetcode算法题)

各位老铁早上好,今天来分享一下我前两天做的leetcode的题目,我个人觉得这两道题目挺经典的,所以打算写这篇博客进行总结,希望各位老铁看完我这篇博客能有所收获。

字符串相加

题目链接

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

该题目要求意味着我们不能使用标准库进行大整数的运算,也不能直接把字符串直接转化为整数进行计算。

那么我们该如何解这道题呢?首先我们在小学都学过加法竖式的运算,下面我就结合该题目画一下加法运算的竖式运算图和分享一下该题目解题思路。
解题思路:在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

下面我们就来写一下代码吧(笔者直接就在oj上写代码了)

1.变量的定义

 //定义end1和end2分别指向字符串num1和num2的末尾int end1=num1.size()-1, end2=num2.size()-1;int carry=0;//存放数字相加的结果int sum=0;//存放相加后转成的字符串string addret;//用于存放字符串转化为数字int val1=0,val2=0;

2.字符串转化为数字:

//只要有一个位数>=0循环就不能停止while(end1>=0||end2>=0){//对字符串num1进行转化成数字if(end1>=0) int val1=num1[end1--]-'0';elseval1=0;//对位数小于另一个字符串的位数进行处理//对字符串num2进行转化成数字if(end2>=0) int val2=num2[end2--]-'0';elseval2=0;}

3.对竖式的每一列式子进行相加:

 //对竖式的每一列式子进行相加sum=val1+val2+carry;//对相加得出得结果>=10进行处理if(sum>9){carry=sum/10;sum%=10;}else{carry=0;}
  1. 把相加得出结果转化回字符串:
 //把相加得出结果转化回字符串addret+=(sum+'0');

5.处理carry==1的情况

//处理carry==1的情况if(carry==1){addret+='1';}

6.把相加后的字符串结果进行逆置

//把相加后的字符串结果进行逆置reverse(addret.begin(),addret.end());

我们看一下该代码的运行结果
在这里插入图片描述
测试用例没问题了,我们再提交一下。(提交时间和击败多少用户不必在意,这个是leetcode特色,和你的网速有关)
在这里插入图片描述

代码总结:(oj平台上的代码)

class Solution 
{
public:string addStrings(string num1, string num2) {//定义end1和end2分别指向字符串num1和num2的末尾int end1=num1.size()-1, end2=num2.size()-1;int carry=0;//存放数字相加的结果int sum=0;//存放相加后转成的字符串string addret;//用于存放字符串转化为数字int val1=0,val2=0;//只要有一个位数>=0循环就不能停止while(end1>=0||end2>=0){//对字符串num1进行转化成数字if(end1>=0) val1=num1[end1--]-'0';elseval1=0;//对字符串num2进行转化成数字if(end2>=0) val2=num2[end2--]-'0';elseval2=0;//对竖式的每一列式子进行相加sum=val1+val2+carry;//对相加得出得结果>=10进行处理if(sum>9){carry=1;sum-=10;}else{carry=0;}//把相加得出结果转化回字符串addret+=(sum+'0');}//处理carry==1的情况if(carry==1){addret+='1';}//把相加后的字符串结果进行逆置reverse(addret.begin(),addret.end());return addret;}
};

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

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

相关文章

【Vue实战教程】之 Vue3 新特性详解

1 为什么要用Vue3 在学习Vue3的新特性之前,我们先来看一下Vue3设计的目的是什么,为什么要对Vue2做出很大的改变,以及Vue3到底解决了什么问题。像Vue这样全球闻名的前端框架,在任何一次改动时,设计者都是经过深思熟虑的…

Kithara和Halcon (二)

Kithara使用Halcon QT 进行二维码实时识别 目录 Kithara使用Halcon QT 进行二维码实时识别Halcon 简介以及二维码检测的简要说明Halcon 简介Halcon的二维码检测功能 Qt应用框架简介项目说明关键代码抖动测试测试平台:测试结果: 开源源码 Halcon 简介以…

vue3+vite纯前端实现自动触发浏览器刷新更新版本内容,并在打包时生成版本号文件

前言 在前端项目中,有时候为了实现自动触发浏览器刷新并更新版本内容,可以采取一系列巧妙的措施。我的项目中是需要在打包时候生成一个version.js文件,用当前打包时间作为版本的唯一标识,然后打包发版 ,从实现对版本更…

基于SpringBoot的矩形范围面时空分析-以震中附近历史地震为例

目录 前言 1、分析的必要性 2、分析的紧迫性 一、数据库物理模型及空间分析实现 1、数据库物理模型 2、空间数据库中的空间查询分析 二、Java后台程序开发 1、模型层设计 2、业务层的设计与实现 三、WebGIS功能设计与实现 1、同时展示4幅地图 2、初始化地图 3、展示…

动态创建标签jQuery效果

动态创建标签jQuery效果https://www.bootstrapmb.com/item/14832 使用jQuery来动态创建HTML标签并添加效果是一种常见的方法。以下是一个简单的示例&#xff0c;说明如何使用jQuery来动态创建<div>标签&#xff0c;并给它们添加一些基本的效果。 1. 创建一个新的<di…

go语言day17 通道channel

Golang-100-Days/Day16-20(Go语言基础进阶)/day18_channel通道.md at master rubyhan1314/Golang-100-Days (github.com) go语言day09 通道 协程的死锁-CSDN博客 channel for range 循环通道对象 单向通道 单项通道常用于函数参数&#xff0c;只是用来限定在函数中只能进行通道…

Langchain核心模块与实战[8]:RAG检索增强生成[loader机制、文本切割方法、长文本信息处理技巧]

Langchain核心模块与实战[8]:RAG(Retrieval Augmented Generation,检索增强生成) RAG(Retrieval-Augmented Generation)技术是一种结合检索和生成功能的自然语言处理(NLP)技术。该技术通过从大型外部数据库中检索与输入问题相关的信息,来辅助生成模型回答问题。其核心…

Mysql中(基于GTID方式)实现主从复制,单主复制详细教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

《深入探秘Java中的枚举:掌握Enum的魔力》

目录 &#x1f4dd; 枚举枚举的定义枚举的使用1、表示一组固定常量2、实现接口3、枚举与策略模式4、EnumSet5、EnumMap &#x1f4ce; 参考文章 &#x1f600; 准备好了吗&#xff1f;让我们一起步入这座Java神奇的城堡&#xff0c;探寻枚举&#xff08;Enum&#xff09;这个强…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板&#xff1f; ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项&#xff1f; 以下实验沿用上一篇z…

Python学习笔记44:游戏篇之外星人入侵(五)

前言 上一篇文章中&#xff0c;我们成功的设置好了游戏窗口的背景颜色&#xff0c;并且在窗口底部中间位置将飞船加载出来了。 今天&#xff0c;我们将通过代码让飞船移动。 移动飞船 想要移动飞船&#xff0c;先要明白飞船位置变化的本质是什么。 通过上一篇文章&#xff0…

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容&#xff1a;用elementui的Upload 组件上传Excel文件&#xff0c;上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求&#xff0c;有很多种方法实现。但是不想要跳转外部地址&#xff0c;所以用了xlsx插件来解析表格&#xff0c;并展…

使用 vSphere vCenter 管理 ESXi

使用 vSphere vCenter 管理 ESXi 1、新建数据中心 在 vSphere Client 中&#xff0c;左上角图标&#xff0c;进入 “清单”&#xff0c;鼠标右键名称&#xff0c;新建数据中心。 输入数据中心名称&#xff0c;我这里直接使用默认值&#xff0c;点击确定。 2、往数据中心中添加…

Linux epoll 机制——原理图解与源码实现分析

epoll概述 epoll是Linux内核为处理大批量文件描述符而作了改进的poll&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 epoll可以理解为event poll&#xff0c;它是一种事件驱动的I/O模型&#xff0c;可以用来替代传统的select和poll模型…

leetcode-98. 验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&…

功能性的安全性保障:TOKEN鉴权校验

1. 引言 在软件开发过程中&#xff0c;确保系统的安全性是至关重要的一环。它不仅关乎保护用户数据的完整性和隐私性&#xff0c;也是维护系统稳定运行的基石。我认为&#xff0c;从宏观角度审视&#xff0c;软件开发的安全性保障主要可分为两大类&#xff1a;功能性的安全性保…

Golang | Leetcode Golang题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {n : len(citations)return n - sort.Search(n, func(x int) bool { return citations[x] > n-x }) }

JDBC操作MySQL数据

一准备、 1、首先在IDEA中导入导入包&#xff1a;mysql-connector-java-8.0.23 2、写初始化语句 &#xff08;1&#xff09;在目录下找到driver类 &#xff08;2&#xff09;在JDBCUtil函数中把驱动器的类路径改掉 ①打开driver类 ②按住类名 Driver用快捷键 CtrlAltshiftC …

AIGC的神秘面纱——利用人工智能生成内容改变我们的生活

近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;正在迅速改变我们与数字世界互动的方式。从自动写作到图像生成&#xff0c;AIGC正逐渐走进我们的日常生活。它不仅提高了效率&#xff0c;还为创意和商业活动带来了新的可能性。让我们一起来探索AIGC的世界&…

17.jdk源码阅读之LinkedBlockingQueue

1. 写在前面 LinkedBlockingQueue 是 Java 并发包中的一个重要类&#xff0c;常用于生产者-消费者模式等多线程编程场景。上篇文章我们介绍了ArrayBlockingQueue&#xff0c;并且与LinkedBlockingQueue做了简单的对比&#xff0c;这篇文章我们来详细分析下LinkedBlockingQueue…