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

news2025/1/11 16:49:56

目录

一、前言

 二、字符串相加

 三、共勉


一、前言

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

     于是专门去 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.coloradmin.cn/o/1558919.html

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

相关文章

Linux(CentOS7)安装软件方式(编译安装,yum,rpm)

目录 前言 安装方式 编译安装 下载 解压 安装 创建软链接 yum rpm 前言 在使用 CentOS 安装软件时,发现安装的方式有好几种,有官网下载 tar 包解压,然后自己编译安装的,也有直接通过 yum 命令一键安装的,还有…

如何制作伸缩侧边栏?

目录 一、html-body 二、CSS 三、JS 四、完整代码 五、效果展示 一、html-body 侧边栏的伸缩需要用户触发事件&#xff0c;这里使用button为例&#xff0c;用户点击按钮实现侧边栏的打开和关闭。 <body><!-- 按钮&#xff0c;可以用文字、图片等作为事件源&am…

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

揭秘DeviceNET转CCLinkIE的高效通讯秘籍

在现代工业自动化领域&#xff0c;上位机通常扮演着系统控制和监视的角色&#xff0c;而DeviceNET与CC-Link IE则是两种常见的现场总线协议。当需要实现对水泵变频器的精确控制时&#xff0c;通过配置一个集成了DeviceNET转CC-Link IE网关的设备&#xff0c;可以实现上位机与变…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

Linux --- 多路转接

目录 前言 五种IO模型 非阻塞IO IO多路转接 --- select 一个简单的select服务器 HandlerEvent socket就绪条件 select的特点 select缺点 IO多路转接 --- poll poll的优点 poll的缺点 IO多路转接 --- epoll epoll工作原理 epoll的优点 基于epoll封装的服务器 e…

Lambda表达式(语法+函数式接口+使用+变量捕获)

文章目录 Lambda表达式一、语法1.(parameters)2. ->3.方法体4.函数式接口 二、Lambda的使用三、变量捕获四、Lambda在集合中的应用 Lambda表达式 允许通过Lambda表达式来代替功能接口提供了一个正常的参数列表和使用这些参数的主体也叫闭包 一、语法 (parameters) -> …

Django框架之DRF(武沛齐全)

一、FBV和CBV FBV&#xff0c;function base views&#xff0c;其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import views urlpatterns [path(users/, views.users), ] from django.http import JsonResp…

模拟游戏《幸福工厂》好玩吗?《幸福工厂》怎么在mac电脑上打开?

关于《幸福工厂》这款游戏是否好玩&#xff0c;普遍的玩家反馈和评价表明&#xff0c;《幸福工厂》&#xff08;Satisfactory&#xff09;因其深度的工厂建造模拟、自由度极高的探索以及精美的图形表现而受到许多玩家的喜爱。它允许玩家在一个开放的世界中规划并建立复杂的生产…

unity 打包安卓错误汇集

Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装&#xff0c;最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题&#xff0c;会报错那种&#xff…

项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加O…

Linux USB驱动(二)

1. Linux USB驱动软件框架 应用程序有两种访问硬件的途径&#xff1a;通过设备驱动程序来访问和跳过设备驱动程序&#xff08;直接使用host驱动程序&#xff09;来访问。 当直接使用Host驱动程序时&#xff0c;可以调用libusb库中已经封装好的函数接口。 2. USB电气信号 一个…

Salesforce技术移民主要国家薪资 - 汇总篇

各位Salesforce的宝们&#xff0c;汇总版的Salesforce技术移民主要国家薪资表格及图示给到大家。 主要针对以下四个岗位&#xff1a;Salesforce管理员、Salesforce项目经理、Salesforce业务分析师、Salesforce架构师&#xff1b; 为方便各位看官&#xff0c;分为了欧元区与美元…

Figma使用问题(更新自己遇到的问题)

文章目录 前言一、如何安装插件&#xff1f;方法1&#xff1a;Figma Community / Figma中文社区方法2&#xff1a;菜单栏 二、图片倾斜插件使用1.Angle Mockups前提&#xff1a;执行过程&#xff1a; 三.中文字体插件&#xff08;宋体等&#xff09;Chinese Font Picker前提&am…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Redis 事务 与 管道

redis事务 谈到事务大家可能就会想起mysql中的事务 注意这里的事务不是指的是事务的四大特性acid 持久性 原子性 隔离性 一致性 事务的概念就是 一组命令,串行化执行而不被打断 这里redis的事务和mysql的事务就不太一样 传统关系型数据库的事务主要强调的是一个没有执行完成就…

python3——基础概要

基础 数据结构 Python 3.x中有6种标准的对象类型&#xff1a; Number&#xff08;数字&#xff09;、String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Tuple&#xff08;元组&#xff09;、Sets&#xff08;集合&#xff09;、Dictionary&#xff08…

B+Tree讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树&#xff0c;不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中&#xff1b; 任何一个…

【MySQL】内外连接——内连接、外连接、左外连接、右外连接、内外连接的区别、左外连接和右外连接的区别

文章目录 MySQLMySQL表的内连接和外连接1. 内连接2. 外连接2.1 左外连接2.2 右外连接 3. 内外连接的区别4. 左外连接和右外连接的区别 MySQL MySQL表的内连接和外连接 MySQL 中的内连接&#xff08;INNER JOIN&#xff09;和外连接&#xff08;包括左外连接 LEFT JOIN 和右外连…

数据分析之Tebleau 简介、安装及数据导入

Tebleau简介 Tebleau基于斯坦福大学突破性交互式技术 可以将结构化数据快速生成图表、坐标图、仪表盘与报告 将维度拖放到画布等地方是他的主要操作方式 例&#xff1a;Tebleau是手机相机 &#xff08;相对来说更简单&#xff09; POWER BI是单反相机 Tebleau各类产品 Teblea…