• 【刷题训练】Leetcode415.字符串相加


    字符串相加

    题目要求

    在这里插入图片描述
    示例 1:

    输入:num1 = “11”, num2 = “123”
    输出:“134”
    示例 2:

    输入:num1 = “456”, num2 = “77”
    输出:“533”
    示例 3:

    输入:num1 = “0”, num2 = “0”
    输出:“0”

    提示:

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

    解题思路:

    1.首先确保num1的长度大于或等于num2的长度。
    2.倒叙遍历num1,每次把 num1[len] 和 num2[len] 的字符相加放入sum中。
    3.取结果的各位放入num1中。并通过sum判断是否进位。
    4.需要把字符转化为数字-'0',nums1[i]被赋值时要+'0'
    5.遍历结束后,如果仍需进位,就在nums1前添加’1’即可

    C++代码:

    class Solution {
    public:
        string addStrings(string num1, string num2) {
        //首先确保num1的长度大于或等于num2的长度
            if (num1.size() < num2.size())
                swap(num1, num2);
            //使用len1和len2保存num1和num2的最后一个字符的下标
            int len1 = num1.size() - 1;
            int len2 = num2.size() - 1;
            //flag用来记录相加时是否有进位。0/1
            int flag = 0;
            //循环遍历次数为num1的长度,从num1的后向前遍历
            while (len1 >= 0)
            {
            //使用sum变量来存储num1和num2的最后一位相加的结果
                int sum = 0;
                if (len2 >= 0)
                {
                    sum += num2[len2] - '0';
                }
                //flag作用就是:如果上次计算结果有进位,那么本次就会+1
                sum += num1[len1] - '0' + flag;
                //只取相加结果的个位数字
                num1[len1] = sum % 10 + '0';
                if (sum >= 10)
                {
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
                //控制遍历循环
                --len1;
                --len2;
            }
            //最后一步,千万不要忘记,判断最后结果是否有进位,有的话num1的长度还会增大一位。使用insert头插
            if (flag == 1)
                   { num1.insert(0, "1");}
            return num1;
        }
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    运行结果

    在这里插入图片描述

  • 相关阅读:
    1、读Mybatis源码--cache缓存
    数据库SQL入门题目及答案记录
    【C++】智能指针
    Linux常用命令
    C++无依赖库的websocket实现
    Python集合类型详解(二)——集合处理方法与应用场景
    Linux系统编程:进程part_1
    Python在数据分析与可视化中的深度实践
    《JAVA EE》内部类(下篇)&Lambda表达式
    C++程序的内存分区
  • 原文地址:https://blog.csdn.net/luhaoran814/article/details/136714057