题目链接:https://leetcode-cn.com/problems/add-binary/
解题步骤:
- 求和肯定会遇到进位问题,用字符变量carry表示进位,'0’表示没有进位,'1’表示有进位
- 规定字符串a的长度大于小于b的长度,并将结果存在a中
- 首先,从尾部开始遍历b,分情况进行分析:
- 如果carry和b[index]相等,和a[index]求和后,a[index]和carry都不需要改变,所以不需要考虑
- 如果carry和b[index]不相等,a[index] == ‘0’,则a[index] = ‘1’,carry = ‘0’;a[index] == ‘1’,则a[index] = ‘0’,carry = ‘1’
- 遍历完b后, 继续遍历a,依次与carry相加,直到carry == ‘0’
- 最后,如果carry = ‘1’,在a开头加上进位
C++实现:
class Solution {
public:
string addBinary(string a, string b) {
int alen = a.size() - 1;
int blen = b.size() - 1;
if (alen < blen) return addBinary(b, a);
char carry = '0';
while (blen >= 0) {
if ((carry == '1' && b[blen] == '0') || (carry == '0' && b[blen] == '1')) {
if (a[alen] == '0') {
a[alen] = '1';
carry = '0';
}
else {
a[alen] = '0';
carry = '1';
}
}
alen--;
blen--;
}
while (alen >= 0 && carry == '1') {
if (a[alen] == '0') {
a[alen] = '1';
carry = '0';
}
else {
a[alen] = '0';
}
alen--;
}
if (carry == '1')
a = "1" + a;
return a;
}
};