【C++】力扣-415-字符串相加(双指针,图例详解!!!)

目录

一、前言

 二、字符串相加

 三、共勉


一、前言

      最近春招已经开始,看周围的同学都在投递一些大厂的实习,某为的手撕代码 --- 字符串相乘某讯的手撕代码 --- 字符串相减等。

     于是专门去 Leetcode 上搜索了一下,发现这类题目是面试常考的题目。只要我们熟练的  掌握四则运算,熟练的掌握字符串的处理,就可以迎刃而解啦!

      常考算法面试题分为:字符串(大数)相加、字符串(大数)相乘、字符串(大数)相减。本次博客主要通过图例和双指针来讲解 ---- 字符串(大数)相加

 二、字符串相加

 链接:415. 字符串相加 - 力扣(LeetCode)

 题目分析:

  • 我们先假设给定的不是字符串形式的数字,而是正常的非负整数,则两数相加遵循正常的加法运算,个位数与个位数相加,十位数与十位数相加,如果该位计算结果>9,则向前进位。 
  • 既然我们对加法的运算非常熟悉,代码也非常好写,那我们现在的任务就是将字符串形式的数字转换为正常的数字进行算术运算。 
  • 那么我们应该怎样取字符串中的每一位数字呢?我们定义两个指针,分别指向两个字符串的尾,然后取出该位置的字符,并将其转换为整数形式参与运算,并将结果再次转换为字符串形式,依次进行计算。 (双指针算法)

 上图中就是我们计算字符串相加的一个大概思路,但是这里需要注意几点情况:

  •  a:进位的情况;
  •  b:两个字符串长度不相等;

针对情况a:我们每次相加后要判断该值是否>9,如果>9,则要-10,前一位并+1。从而完成进位

针对情况b:我们对循环的结束条件进行控制,当两个指针均走到结束位置,循环才结束,仅仅一个走到头不算结束,并且先走到头的指针,其值一直为0。

整个过程的图例与解析:

  1. 对齐低位,即从两个字符串的末位开始从后往前计算;
  2. 计算每一位,当前位的和等于两个加数的当前位的数字之和再加上进位;
  3. 当前位的值等于当前位的和模10
  4. 当前位产生的进位位等于当前位的和除以10并向下取整;
  5. 当两个数字的位数不一致,位数少的高位补0
  6. 当计算完两个数字所有位后,进位位不为0的,即高位补1

代码样例: 

class Solution {
public:string addStrings(string num1, string num2) {// 计算两个字符串的 下标 长度int end1 = num1.size()-1 , end2 = num2.size()-1;// 进位换算符号int next = 0;// 最终字符串 string a;// 开始相加,直到两个字符串都加完为止 while(end1>=0 || end2>=0){int val1 = 0;if(end1>=0){// 将字符准换为数字val1 = num1[end1--] - '0';}int val2 = 0;if(end2>=0){val2 = num2[end2--] - '0';}int ret  = val1 + val2 + next;// 计算进位next = ret/10;ret = ret%10;// 写入字符串a+=ret + '0';}if(next==1){a+="1";}reverse(a.begin(),a.end());return a;}
};

 三、共勉

        以下就是我对 力扣-415-字符串相加 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 字符串相乘 的理解,请持续关注我哦!!! 

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

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

相关文章

conda使用记录

linux 使用conda创建新一个新的python环境过程 conda create -n recommendation_env python3.8.18 # 指定python版本 conda env list # 查看所有的环境 conda activate recommendation_env # 激活创建的新环境 pip install flask # 安装依赖 或者 pip install flask版本号 或者…

每日更新5个Python小技能 | 第六期

大家好!欢迎阅读每日更新的Python小技能系列,今天是第六期。在这个系列中,我将每天分享5个高级的Python小技巧,帮助大家进一步提升编程技能。让我们开始吧! 1. 元类(Metaclasses) 元类是Pytho…

脑机交互,屏幕是必须?No!让机器人发出激光光点实现脑机接口交互

一般说来,传统脑机接口(BCI)系统的交互过程依靠一个图形化的用户界面,不利于设备的便携性。而一种无屏幕的BCI可以通过让机器人在外界环境中发出刺激从而实现更直接的命令其中机器人使用激光光点凸显环境中的候选对象,而用户的目标则从脑电图…

跳跃游戏-java

题目描述: 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 解题思想: …

正则表达式爬取页面图片(<img[^>]*src=“([^“]+))

import re import os import requests if __name__ __main__:# 创建一个文件夹,保存所有的图片if not os.path.exists(./##):os.mkdir(./##)# - 指定urlurl *******headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like …

AIGC新潮流!手势灵动数字人视频、百变模特服装图、3D模型纹理一键生成

1、营销应用:AI生成生成带手势(手部动作)的数字人视频 (1)一个基于扩散模型的数字人生成框架,专注于生成具有全身动作的主播风格视频。该系统通过仅需一分钟的个人视频片段进行训练,便能自动生成具有精确躯干和手部动作的主播风格视频。 (2)定位:该框架定位于解决现…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

自动驾驶-如何进行多传感器的融合

自动驾驶-如何进行多传感器的融合 附赠自动驾驶学习资料和量产经验:链接 引言 自动驾驶中主要使用的感知传感器是摄像头和激光雷达,这两种模态的数据都可以进行目标检测和语义分割并用于自动驾驶中,但是如果只使用单一的传感器进行上述工作…

数据处理库Pandas数据结构DataFrame

Dataframe是一种二维数据结构,数据以表格形式(与Excel类似)存储,有对应的行和列,如图3-3所示。它的每列可以是不同的值类型(不像 ndarray 只能有一个 dtype)。基本上可以把 DataFrame 看成是共享…

【机器学习之---数学】熵和交叉熵

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 熵和交叉熵 1. 熵 概率分布的熵可以被解释为与给定分布中的随机变量相关的不确定性或缺乏可预测性的度量。 我们还可以使用熵来定义数据源的信息内容。…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分,小程序在日常生活中发挥着越来越重要的作用。因此,了解和严格遵守小程序的 UI 设计标准非常重要,它不仅可以帮助我们在保证良好用户体验的同时优化小程序,还可以使我们的产品在竞争激烈的市场中占据…

蓝桥杯2023年第十四届省赛真题-飞机降落

蓝桥杯2023年第十四届省赛真题-飞机降落 - C语言网 (dotcpp.com) “蓝桥杯前一周才开始写真题,练算法,能赢嘛?会赢的(bushi五条)” 题目描述 N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到…

JAVA学习-网络编程.Java11标准化的HTTP Client

Java 11引入了标准化的HTTP Client,它提供了一种现代化、灵活且易于使用的方式来进行HTTP通信。下面是关于Java 11标准化的HTTP Client的概述以及与其他比较和高级应用的说明: 1. 概述: Java 11标准化的HTTP Client是一种替代HttpURLConnect…

git:开发中可能遇到的问题:拉取远程分支相关(有远程仓库但是没有远程分支或者fatal: bad revision ‘origin/master‘)

远程分支相关 有远程仓库但是没有远程分支(git fetch) shanshanEVYSHAN-MC0 bk_template_ieod % git remote -v origin gitxxxx.git (fetch) origi…

软考 - 系统架构设计师 - 软件逆向工程

概念 软件逆向工程,又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结…

零基础入门转录组数据分析——绘制差异火山图

零基础入门转录组数据分析——绘制差异火山图 差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。 本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解…

数字范围按位与

题目链接 数字范围按位与 题目描述 注意点 0 < left < right < 2^31 - 1包含 left 、right 端点 解答思路 返回区间内所有数字按位与的结果&#xff0c;所以区间内所有数字在某一位的值相同&#xff0c;则结果该位数字为该值&#xff0c;否则该位数字为0&#xf…

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…

火狐浏览器垂直标签页对比 Sidebery vs Tab Center Reborn

Sidebery 链接 商店 评价 大而全&#xff0c;各种功能&#xff0c;以及相关的配置项&#xff0c;应有尽有&#xff1b;功能包括但不限于&#xff1a; 树形标签页、着色、面板、容器、快照最近关闭、标签页、历史 默认的配置就已经很好用了&#xff1b; 快捷键&#xff1a;F…

apollo7.0版本环境搭建

根据文档《 Pre-requisite Software Installation Guide》要求&#xff0c;大体安装步骤如下 Installing Ubuntu LinuxInstalling NVIDIA GPU DriverInstalling Docker EngineInstalling NVIDIA Container Toolkit Installing Ubuntu Linux 安装 ubuntu 18.04 分区 boot&am…