Leetcode刷题 ——— (3)字符串相加

字符串相加

  • 一、题目
    • 1.题目描述
    • 2.原题链接
  • 二、解题报告
    • 1.思路分析
    • 2.代码详解
    • 3.按步骤分析


一、题目

1.题目描述

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

2.原题链接

提示:题目链接放这里

二、解题报告

1.思路分析

思路:

  1. 首先将字符串反转;
  2. 考虑两数相加是否有进位位;
  3. 有进位时将进位位保留并以字符串的形式输出;
  4. 分别考虑两位数位数相同时和不同时的输出情况;
  5. 最后以字符串的形式输出。

2.代码详解

class Solution {
public:
    string addStrings(string num1, string num2) {
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());
        int i,j,sign;
        i=j=0;
        sign=0;
        string result;
        while(i<num1.size()&&j<num2.size())
        {
            int a=0,b=0;
            int sum=0;
            a=num1[i]-'0';
            b=num2[j]-'0';
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            }else sign=0;
            result.push_back(sum+'0');
            i++;
            j++;
        }
        while(i<num1.size())
        {
            int a=0,b=0;
            int sum=0;
            a=num1[i]-'0';
            b=0;
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            } else sign=0;
            result.push_back(sum+'0');
            i++;
        }
        while(j<num2.size())
        {
            int a=0,b=0;
            int sum=0;
            b=num2[j]-'0';
            a=0;
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            } else sign=0;
            result.push_back(sum+'0');
            j++;
        }
        if(sign>0)
            result.push_back(sign+'0');
            reverse(result.begin(),result.end());
            return result;
    }
};

3.按步骤分析

  1. 字符反转
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
  1. 两个数对应相加
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=num2[j]-'0';
sum=a+b+sign;
if(sum>=10){
			sum-=10;
            sign=1;
            }else sign=0;
  1. 两位数相等时
while(i<num1.size()&&j<num2.size())
        {
            int a=0,b=0;
            int sum=0;
            a=num1[i]-'0';
            b=num2[j]-'0';
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            }else sign=0;
            result.push_back(sum+'0');
            i++;
            j++;
        }
  1. num1位数 > num2位数时
while(i<num1.size())
        {
            int a=0,b=0;
            int sum=0;
            a=num1[i]-'0';
            b=0;
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            } else sign=0;
            result.push_back(sum+'0');
            i++;
        }
  1. num1位数 < num2位数时
while(j<num2.size())
        {
            int a=0,b=0;
            int sum=0;
            b=num2[j]-'0';
            a=0;
            sum=a+b+sign;
            if(sum>=10){
                sum-=10;
                sign=1;
            } else sign=0;
            result.push_back(sum+'0');
            j++;
        }
  1. 进位位及输出
if(sign>0)result.push_back(sign+'0');
reverse(result.begin(),result.end());
return result;

你可能感兴趣的:(Leetcode,leetcode,算法,职场和发展)