【刷题笔记】415. 字符串相加

106 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

一、题目描述:

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

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

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

 

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

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

二、思路分析:

此题只是一道利用计算机做竖式加法的题,只不过给的不是两个整数,而是两个存着整数的字符串而已,对于一个char型字符a,由于内部采用ASCII码,所以我们只需要将其减去‘0’即可转化为真正的整数,对于每一次加法我们需要取出两个字符串对应为的字符再将其转化为对于整数a,b即可然后就可以将其做加法,只不过由于我们做加法时需要考虑进制上来的值,所以我们还需要加上上一位做加法后进上来的值weight(我们将其初始化为0,为了方便第一次的加法)然后我们再将其对10取余后在插入到字符串中,同时将其除以10就得到了我们应该再下一位需要进位的值,同时需要注意对于遍历完之后有可能weight还不为0,比如1+9一次循环即可完成但是退出循环后weight还不为0,所以我们最后还需要判断是否还需要进位。

三、AC 代码:

class Solution {
public:
    string addStrings(string num1, string num2) {
        int weight = 0;
        int temp = 0;
        string res;
        int a,b;
        for(int i = num1.length()-1, j = num2.length()-1;i>=0||j>=0;i--,j--)
        {   
            a = b = 0;
            if(i>=0) a = num1[i] - '0';
            if(j>=0) b = num2[j] - '0';
            temp = a + b + weight;
            res.push_back((temp%10+'0'));
            weight = temp/10;
        }
        if(weight!=0) res.push_back(weight+'0');
        char t;
        for(int i = 0;i< res.length()/2;i++)
        {
            t = res[i];
            res[i] = res[res.length()-1-i];
            res[res.length()-1-i] = t;
        }
        return res;    
    }
};