思路:模拟。

注意到题中len(s),len(t)≤100000,若先转换为int,会超出整型范围。 考虑模拟手算过程。

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

代码(JAVA实现)

public class Solution {
	public String solve (String s, String t) {
        int len1=s.length();
        int len2=t.length();
        if(len1==0) return t;
        if(len2==0) return s;
        int len=len1>len2?len1:len2;//len为len1和len2两者中较大者
        char[] sum=new char[len+1];//逆序存放,从低位到高位(下标小的对应低位)
        int carry=0;//进位
        int num=0;//两个数当前位上的数字相加的和
        int digit=0;//进位后当前位上的数字
        int i=len1-1,j=len2-1;//i为字符串s的遍历指针,j为字符串t的遍历指针
        int k=0;//字符数组sum的遍历指针
        //将两个字符串右对齐计算
        while(i>=0&&j>=0) {
        	num=(s.charAt(i)-'0')+(t.charAt(j)-'0')+carry;
        	digit=num%10;
        	carry=num/10;
        	sum[k++]=(char)(digit+48);
        	i--;
        	j--;
        }
        while(i>=0) {//字符串s还没遍历完
        	num=(s.charAt(i)-'0')+carry;
            digit=num%10;
            carry=num/10;
            sum[k++]=(char)(digit+48);
            i--;
        }
        while(j>=0) {//字符串t还没遍历完
        	num=(t.charAt(j)-'0')+carry;
            digit=num%10;
            carry=num/10;
            sum[k++]=(char)(digit+48);
            j--;
        }
        if(carry!=0) sum[k]=(char)(carry+48);//还有进位
        else k--;//指向最后一个字符
        String res="";
        while(k>=0)res+=sum[k--];//从高位到低位的输出
        return res;
    }
}