LeetCode解法汇总415. 字符串相加

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给定两个字符串形式的非负整数 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 都不包含任何前导零

解题思路:

/**

* 415. 字符串相加

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

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

*

* 解题思路:

* 把num1和num2转换为char类型的数组,然后从右向左取每一位上的值,两个数相加求和,如果和大于10则进位,否则直接添加和。

* 结束条件就是两个数组都遍历完成并且进位为false。

*/

代码:

class Solution415
{
public:
    string addStrings(string num1, string num2)
    {

        std::vector<char> c1(num1.begin(), num1.end());
        std::vector<char> c2(num2.begin(), num2.end());

        bool isJin = false;
        int i = 0;
        string str = "";
        while (i < num1.size() || i < num2.size() || isJin)
        {
            int value1 = 0;
            int value2 = 0;
            int index = num1.size() - i - 1;
            if (index >= 0)
            {
                value1 = c1[index] - '0';
            }
            index = num2.size() - i - 1;
            if (index >= 0)
            {
                value2 = c2[index] - '0';
            }
            value1 = value1 + value2;
            if (isJin)
            {
                value1++;
                isJin = false;
            }

            if (value1 > 10)
            {
                value1 -= 10;
                isJin = true;
            }
            str.insert(0, to_string(value1));
            i++;
        }
        return str;
    }
};

猜你喜欢

转载自blog.csdn.net/AA5279AA/article/details/131761362