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

字符串相加

一:题目

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

解释:该题的意义在于,两个数字相加,如果数字超过了int,甚至超过了long long的边界,依旧可以用这种将两个数字转换成两个字符串相加的形式来得到相加的答案,答案存储到了字符数组中

二:思路

①:相加就会有进位,进位最大就是1(因为最大的单位数就是9+9,进位也只是1),next初始化为0;

②:相加意味着要num1和num2都从后往前的遍历,所以我们用end1和end2来代表下标来表示num1和num2的最后一个字符

③:num1和num2相加的结果,是一个一个字符的得到的,必然要存进一个string类的对象中,可以采用不断地头插(因为得到的结果是从后往前的,比如十位,百位,千位,所以是头插),也可以直接+=,再reverse一下,后面种方法更好,因为insert会频繁的挪动数据,而+=仅仅是逆置一次

三:代码

①:头插版本
class Solution {
public:
    string addStrings(string num1, string num2) {

        int next = 0;   //控制进位的值
        int end1 = num1.size()-1;//-1才让end1对应上最后一个字符的下标
        int end2 = num2.size()-1;//同理

        string retstr;//字符数组retstr用来存储最后得到的正确相加结果

        while(end1>=0 || end2>=0)//两个字符串都遍历结束了  才终止运算
        {
            int a = 0;
            int b = 0;

            if(end1>=0)
            a = num1[end1--]-'0';//a用来保存num1中取出的字符对应的数字的值

            if(end2>=0)
            b = num2[end2--]-'0';//b用来保存num2中取出的字符对应的数字的值

            int sum = a+b+next;//sum用来存储一次相加的总结果
            char c = sum%10 + '0';//通过sum%10 得到该位的正确结果 在+'0'转换成字符
            next = sum/10;//通过sum/10 得到进位的值


            retstr.insert(0,1,c);//不断地头插c c是该位运算得到的结果
        }

        if(next == 1)//最后若进位还是1 
        retstr.insert(0,1,'1');//则需要把'1'写在最前面 例如99+1 得到100

        return retstr;//返回这个字符数组
        
    }
};
②:+=再reverse版本
class Solution {
public:
    string addStrings(string num1, string num2) {

        int next = 0;   
        int end1 = num1.size()-1;
        int end2 = num2.size()-1;

        string retstr;

        while(end1>=0 || end2>=0)
        {
            int a = 0;
            int b = 0;

            if(end1>=0)
            a = num1[end1--]-'0';

            if(end2>=0)
            b = num2[end2--]-'0';

            int sum = a+b+next;
            char c = sum%10 + '0';
            next = sum/10;


            retstr+=c;//用+=
        }

        if(next == 1)
        retstr+='1';


        reverse(retstr.begin(),retstr.end());//再逆置
        return retstr;       
        
    }
};

Q:为什么两个字符串都遍历结束了  才终止运算?

A:因为若是"999"+"1"这种 下面的"1"早早结束了,但进位值next为1,会不断地让"999"进行运算,所以应该两个字符串都遍历结束了  才终止运算

相关文章:

  • 迷你世界脚本道具接口:Item
  • 【Java】—— 堆
  • CC++的内存管理
  • import模块到另一个文件夹报错:ModuleNotFoundError: No module named xxx
  • Geotools中获取Shapefile的属性表格字符集编码的一种方法
  • [ruby on rails]ActiveModel源码阅读(Validations)
  • SQL注入的分类靶场实践
  • 【大模型安全】大模型安全概述
  • 常见webshell工具的流量特征
  • 批量修改或设置 Word 标题、主题、标记、作者、总编辑时间等元数据
  • Leetcode 3474. Lexicographically Smallest Generated String
  • 掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能✨
  • windows环境执行composer install出错
  • mac上最好的Python开发环境之Anaconda+Pycharm
  • 关于高精度力扣66
  • HTTP 状态代码 501 502 问题
  • 深度学习神经网络分类原理
  • centOS 环境 安装redis方法
  • DeepSearchAcademic-基于舆情中文核心论文的deepsearch的个人项目
  • 常见的网络协议介绍
  • 自适应网站ui做几套/百度商城官网首页
  • 世界街景地图怎么退订/seo搜索推广费用多少
  • 无锡做网站选优易信/培训机构是干什么的
  • 如何帮人做网站赚钱吗/软文广告平台
  • 湖北建设银行招标在哪个网站看/个人网站设计作品
  • 邯郸之窗官网/宁波网站推广优化哪家正规