题目来源
题目描述
题目解析
需要注意的:
- string和int之间互相换砖
- 每次相加时,会有进位的可能,会影响之后相加的结果
- 两个输入的str可能不同
算法:
- 逐个从两个str中的尾部取出字符,然后转换为数字,相加
- 如果大于等于2,则标记进位carry
- 否则,在ans前面添加一个1
class Solution {
public:
string addBinary(string a, string b) {
string ans;
int anum = 0, bnum = 0, carry = 0, temp = 0;
for (int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0; --i, --j)
{
anum = i < 0 ? 0 : a[i] - '0';//处理两个字符串长度不相等的情况
bnum = j < 0 ? 0 : b[j] - '0'; //注意别写错了
ans = to_string((anum + bnum + carry) % 2) + ans;
carry = (anum + bnum + carry) / 2;
}
return (carry ? to_string(carry) + ans : ans); //AC4ms
}
};