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;
}
};