题意:
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
方法:
直接模拟
思路:两数相加顺序是从最低位到最高位,因此需逆向遍历字符串。首先,初始化 下标 i 指向字符串 s 的末尾,下标 j 指向字符串 t 的末尾和进位标志 flag = 0。逆向循环相加操作如下:int temp=s[i--]-'0'+t[j--]-'0'+flag;//求和
因为两字符串长度可能不相等,所以还需遍历长的字符串。
之后还需判断进位;最后反转结果字符串即可。
class Solution { public: string solve(string s, string t) { string res=""; int i=s.size()-1,j=t.size()-1; int flag=0;//进位 while(i>=0&&j>=0){//逆序遍历 int temp=s[i--]-'0'+t[j--]-'0'+flag;//求和 if(temp>9){//进位 flag=1; temp%=10; }else{ flag=0; } res+=temp+'0';//追加结果 } while(i>=0){//字符串s的长度长些 int temp=s[i--]-'0'+flag; if(temp>9){ flag=1; temp%=10; }else{ flag=0; } res+=(temp)+'0'; } while(j>=0){//字符串t的长度长些 int temp=t[j--]-'0'+flag; if(temp>9){ flag=1; temp%=10; }else{ flag=0; } res+=(temp)+'0'; } if(flag){//最后判断进位 res+='1'; } reverse(res.begin(),res.end());//反转字符串 return res; } };
时间复杂度:空间复杂度: