Every day a leetcode
题目来源:415. 字符串相加
解法1:模拟
我们定义两个指针i和j指向num1和num2的的末尾,即最低位,同时定义一个变量add维护当前是否有进位,然后从末尾到开头逐位相加即可。
这里我们统一在指针当前下标处于负数的时候返回0等价于对位数较短的数字进行了补零操作,这样就可以除去两个数字位数不同情况的处理。
代码:
/*
* @lc app=leetcode.cn id=415 lang=cpp
*
* [415] 字符串相加
*/
// @lc code=start
class Solution
{
public:
string addStrings(string num1, string num2)
{
int i = num1.length() - 1;
int j = num2.length() - 1;
int add = 0;
string ans = "";
while (i >= 0 || j >= 0 || add != 0)
{
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans.push_back('0' + result % 10);
add = result / 10;
i--;
j--;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(max(len1, len2)),其中len1是字符串num1的长度,len2是字符串num2的长度,竖式加法的次数取决于较大数的位数。
空间复杂度:O(1)。