###### tags: `Leetcode` `easy` `string` `python` `c++`
# 67. Add Binary
## [題目來源:] https://leetcode.com/problems/add-binary/
## 題目:
Given two binary strings a and b, return their sum as a binary string.
## 解題想法:
* 遞迴
* 每次判斷最尾巴字符 若1+1 需要進位
## Python(Sol1):
``` python=
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
#法1: 超偷懶 return bin(int(a, 2) + int(b, 2))[2:]
#法2:
#判斷空字串 可以用一句:return a if a else b
if not a:
return b
if not b:
return a
#從最後一位下手
if a[-1]=='1' and b[-1]=='1':
return self.addBinary(self.addBinary(a[:-1],b[:-1]),'1')+'0'
elif a[-1]=='0' and b[-1]=='0':
return self.addBinary(a[:-1],b[:-1])+'0'
else:
return self.addBinary(a[:-1],b[:-1])+'1'
if __name__ == '__main__':
result = Solution()
a = "111"
b = "11"
ans = result.addBinary(a,b)
print(ans)
```
## Python(Sol2):
``` python=
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
res=''
#從尾巴開始加
m=len(a)-1
n=len(b)-1
plus=0
while m>=0 or n>=0 or plus:
plus+= int(a[m]) if m>=0 else 0
plus+= int(b[n]) if n>=0 else 0
res+= str(plus%2)
m-=1
n-=1
plus=plus//2
return res[::-1]
```
## C++:
``` cpp=
#include <iostream>
#include <algorithm>
using namespace std;
class Solution
{
public:
string addBinary(string a, string b)
{
string res = "";
int carry = 0, m = a.size() - 1, n = b.size() - 1;
while (m >= 0 || n >= 0 || carry == 1)
{
// char into int: char-'0'
carry += m >= 0 ? a[m] - '0' : 0;
carry += n >= 0 ? b[n] - '0' : 0;
// int into char: int+'0'
res += (carry % 2 + '0');
m -= 1;
n -= 1;
carry /= 2;
}
//需宣告新的變數存原始字串
string re_res(res);
// #include <algorithm>
reverse(re_res.begin(), re_res.end());
return re_res;
}
};
int main()
{
string a = "1010", b = "1011";
Solution res;
string ans = res.addBinary(a, b);
cout << ans << endl;
return 0;
}
/*
if (i<0)
i=10;
else
i=i-1;
=>> i= (i<0)? 10:i-1;
//判別式?true:false
*/
```