Leetcode每日一题(简单):415. 字符串相加(2023.7.17 C++)

目录

415. 字符串相加

题目描述:

实现代码与解析:

模拟加法

原理思路:

简洁代码


415. 字符串相加

题目描述:

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

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

示例 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 都不包含任何前导零

实现代码与解析:

模拟加法

class Solution {
public:

    string addStrings(string num1, string num2) {
        vector res1;

        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());

        int t = 0; // 进位
        for (int i = 0; i < num1.size() || i < num2.size(); i++)
        {
            if (i < num1.size()) t += num1[i] - '0';
            if (i < num2.size()) t += num2[i] - '0';
            res1.push_back(t % 10);
            t /= 10; // 下一位的进位
        }
        if (t) res1.push_back(1);
        string res2 = "";
        for (int i = res1.size() - 1; i >= 0; i--) res2 += to_string(res1[i]);
        return res2;
    }
};

原理思路:

        我这里是套用了高精度的代码,实际可以不用这样写,直接模拟就行,当然原理是一样,下面这个代码省去了一些此题没必要翻转。

简洁代码

class Solution {
public:

    string addStrings(string num1, string num2) 
    {
        string res = "";
        int t = 0;
        int i = num1.size() - 1, j = num2.size() - 1;

        while (i >= 0 || j >= 0) 
        {
            if (i >= 0) t += num1[i] - '0';
            if (j >= 0) t += num2[j] - '0';
            res += to_string(t % 10);
            t /= 10;
            i--;
            j--;
        }
        if (t) res += '1';
        reverse(res.begin(), res.end());
        return res;
    }
};

你可能感兴趣的:(Leetcode,leetcode,c++,字符串,算法,双指针)