20.4.13 字符串相加 简单

时间复杂度O(n),空间复杂度O(n)

题目

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

解题思路

1、利用ascii码进行运算,逆序对两字符串对应位置的字符进行运算,再判断有无进位,把运算结果放进字符result,最后反转result即可。

代码思路

1、变量cf为进位标志,逆序循环遍历两字符串;
2、-'0'是为了ascii码不越界,因为走完while循环中前三个if,可能会ascii值可能会越界;
3、再判断有无进位;
4、循环结束后,反转result。

代码

class Solution {
public:
    string addStrings(string num1, string num2) {
        string result;
        int cf=0, i=num1.length()-1, j=num2.length()-1;
        while(cf || i>=0 || j>=0){
            char sum = 0;
            if(i>=0) sum+=num1[i--]-'0';
            if(j>=0) sum+=num2[j--]-'0';
            if(cf) sum+='1'-'0';
            if(sum>=10){
                sum+=38;
                cf=1;
            } 
            else{
                sum+=48;
                cf=0;
            }
            result.push_back(sum);
        }

        reverse(result.begin(), result.end());
        return result;
    }
};
posted @ 2020-04-13 13:18  肥斯大只仔  阅读(137)  评论(0编辑  收藏  举报