题目要求
给定两个二进制字符串,返回其相加之后的和。
输入字符串都是非空的,只包含字符1或0。
解题思路
以前我们做过一道题,给数字加1:leetcode 66 plus one,其中讨论了两种情况,同样的可以迁移到本题上,不同的是,这次我们处理的是二进制,字符串。
(1)首先 还是考虑进位的问题,二进制,所以当和满足2的时候就需要进位,在程序中,我们用和 除以2的形式来判断是否需要进位。
(2)第二点不同就是,我们输入的是字符串,我们显然要先将字符转化为整数才方便进行运算操作, 在程序中用 - ’0‘ 来进行操作,进行转换。
(3)根据以上两点便可以进行代码书写了,从最后一位开始遍历,若一方位数不够则用0进行填补(所以才有三目运算的写法),每次运算的结果通过取余数来得到。
主要代码 c++
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
int indexa = a.size() - 1;
int indexb = b.size() - 1;
int carry = 0; // 进位标识
while(indexa>=0 || indexb>=0 || carry >0)
{
int elema = indexa>=0 ? a[indexa--] - '0' : 0;
int elemb = indexb>=0 ? b[indexb--] - '0' : 0;
int sum = elema + elemb + carry;
res = to_string(sum % 2) + res;
carry = sum / 2; // 进位获取方式
}
return res;
}
};