题目表述:

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

注意:

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

 思路:

之前做个链表形式的加法(leetcode 2.两数相加),也用C#做过字符串形式的加法和乘法(大整数加法和乘法),思路都是一样的,写起来熟练很多。代码如下:

string addStrings(string num1, string num2) {
        if(num1==\"0\") return num2;
        if(num2==\"0\") return num1;
        
        string ans=\"\";
        int m=num1.size(),n=num2.size();
        int charM,charN,sum,c=0;
        while(m||n)
        {
            if(m>0) charM=num1[--m]-\'0\';
            else charM=0;
            
            if(n>0) charN=num2[--n]-\'0\';
            else charN=0;
            
            sum=charM+charN+c;
            c= sum>9? 1:0;
            sum=sum%10;
            
            ans.push_back(char(sum+\'0\'));
        }
        
        if(c) ans.push_back(\'1\');
        reverse(ans.begin(),ans.end());
        return ans;
    }

时间复杂度 O(n),空间复杂度O(1),测试运行时间 8 ms。

收藏 打印