原题链接
解析:
题目为长整数相加的变形版本,因为其比较长,所以考虑使用双指针的策略,从右到左依次进行遍历和计算,当相加的数值carry大于10时,取其余数,添加到字符串后面,之后对carry取整,进行下一次的操作。
为了防止在相加的过程中有一个到了头另外一个没到,所以在每一个数组相加的时候,都判断一下是否是到头了,即i>=0 或j>=0。
最后将得到的字符串进行反转即可。
完整代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int len1 = num1.length();
int len2 = num2.length();
int i = len1 -1, j = len2 -1, carry = 0;
string ans;
while(i >=0 || j >= 0 || carry != 0)
{
if(i >= 0) carry += num1[i--] - '0';
if(j >= 0) carry += num2[j--] - '0';
ans += to_string(carry%10);
carry /= 10;
}
reverse(ans.begin(), ans.end());
return ans;
}
};