题目描述
https://leetcode-cn.com/problems/add-strings/
解法
解法1:我的解法
class Solution {
public:
string addStrings(string num1, string num2) {
string res;
int i = num1.size() - 1;
int j = num2.size() - 1;
int carry = 0;
for (; i >= 0 && j >= 0; i--, j--) {
int sum = (num1[i] - '0') + (num2[j] - '0') + carry;
int val = sum % 10;
carry = sum / 10;
//res.insert(size_t(0), size_t(1), val + '0');
res.insert(res.begin(), val + '0');
}
int index;
string left;
if (i >= 0) {
index = i;
left = num1;
} else {
index = j;
left = num2;
}
while (index >= 0) {
int sum = left[index] - '0' + carry;
int val = sum % 10;
carry = sum / 10;
//res.insert(size_t(0), size_t(1), val + '0');
res.insert(res.begin(), val + '0');
index--;
}
if (carry) {
//res.insert(size_t(0), size_t(1), carry + '0');
res.insert(res.begin(), carry + '0');
}
return res;
}
};
没啥好说的,就是模拟手工加法,但是写的太长了,啰嗦。一会贴一个别人写的简洁版本。
另外 res.insert(0, 1, carry + '0'); 不知道为啥突然编译不过了,说call to member function 'insert' is ambiguous。加了size_t()就好了。
然后参考了别人的提交,res.insert(res.begin(), carry + '0'); 这么写也可以,以后用这个重载版本吧。
解法2:简洁
思路一样,就是写法简洁,体会一下。用或,缺少的就补0.
class Solution {
public:
string addStrings(string num1, string num2) {
int i = num1.size() - 1;
int j = num2.size() - 1;
string res;
int carry = 0;
while (i >= 0 || j >= 0) {
int a = (i >= 0) ? num1[i--] - '0' : 0;
int b = (j >= 0) ? num2[j--] - '0' : 0;
int sum = a + b + carry;
int val = sum % 10;
carry = sum / 10;
res.insert(res.begin(), val + '0');
}
return carry ? "1" + res : res;
}
};
网友评论