2023-07-17 LeetCode每日一题(字符串相加)

2023-07-17每日一题

一、题目编号

415. 字符串相加

二、题目链接

点击跳转到题目位置

三、题目描述

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

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

提示:

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

四、解题代码

class Solution {
public:
    string addStrings(string num1, string num2) {
        string s;
        int m = num1.size();
        int n = num2.size();
        int i = m - 1, j = n - 1;
        int carry = 0;
        while(i >= 0 && j >= 0){
            int num = carry + (num1[i] - '0') + (num2[j] - '0');
            s += char(num % 10 + '0');
            carry = num / 10;
            --i;
            --j;
        }
        while(i >= 0){
            int num = carry + (num1[i] - '0');
            s += char(num % 10 + '0');
            carry = num / 10;
            --i;
        }
        while(j >= 0){
            int num = carry + (num2[j] - '0');
            s += char(num % 10 + '0');
            carry = num / 10;
            --j;
        }
        if(carry != 0){
            s += '1';
        }
        reverse(s.begin(), s.end());
    return s;
    }
};

五、解题思路

(1) 本道题目来源于高精度加法,如果两个数字十分之大,无论是int还是long long都无法解决问题。那么就需要转化成字符串相加的形式才能够解决实质性的问题。那么如何用字符串来模拟呢?

(2) 我们在小学的时候就已经学习过列竖式相加。用一个最简单的例子证明,1+9,那么等于10,个位为(1 + 9)% 10,进位位为(1 + 9) / 10。

(3) 所以我们需要诸位相加,利用上述的思路来进行解决问题。我们用双指针来遍历两个字符,i来遍历字符串num1,j来遍历字符串num2。因为字符串最后是个位,所以要倒序遍历,知道哪一个指针到达下标为0,这个时候需要将剩余没有加完的字符串加完。最后一定要注意,一定要将没有加完的进位位加上(如果为0不加)。

(4) 最后注意翻转字符串将高位移动到前面即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)