67. Add Binary
Description
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
Analysis
这道题和之前做过的Add two number在题意上有很多相似之处,都是将两个二进制数进行加法运算,但这道题的难点在于,字符串有可能是不等长的,一旦出现了不等长,就很有可能会因为空指针的问题导致程序出现问题。
最开始我的思路比较直接,就是将字符串转换为二进制数后再进行加法运算,看似很简单的方法往往其中会暗藏很多陷阱,导致我卡在这道题上很长时间。
参阅了Discuss区之后,我获得了一种比较好的思路,既然之前程序出问题都是因为字符串不等长,那么我们只需要将短一些的字符串用0补齐不就解决了吗?
这种放法的思路是,从右到左按位取出字符串中的每一位,对于较短的字符串则用0来补位。对两个数进行加法运算,同时维护一个carry变量用于进位即可,代码如下:
如果运算到最高位发现还需要进位,那就在字符串开头插一个0即可。
class Solution {
public:
string addBinary(string a, string b) {
int str_size=max(a.size(),b.size());
string res;
int carry=0;
for(int i=0;i<str_size;i++){
int tmpA=i<a.size()?(a[a.size()-1-i]-'0'):0;
int tmpB=i<b.size()?(b[b.size()-1-i]-'0'):0;
res.insert(0,to_string((tmpA+tmpB+carry)%2));
carry=(tmpA+tmpB+carry)>1?1:0;
}
if(carry==1)
res.insert(0,"1");
return res;
}
};