题意:
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
方法:
直接模拟
思路:两数相加顺序是从最低位到最高位,因此需逆向遍历字符串。首先,初始化 下标 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;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号