【题目】:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
【思路】:(1)把两个二进制数分别转成十进制数,随后进行相加得到一个十进制的和,把和转化成二进制 (2)从右向左对两个二进制数进行判断并相加,需要首先对较短的二进制左边填充0.若当前位都为‘1’,则和的当前位为0,向左的进位(carry)需要加1;若当前位都为‘0’,则和的当前为0+carry;否则就是当前位中有‘1’和‘0’,若carry为1,和的当前位为‘0’,下一位的carry为1,不然
和的当前位为‘1’,下一位的carry为0.
【Python代码1】:
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
a_int, b_int = int(a,2), int(b,2)
return str(bin(a_int+b_int))[2:]
【Python代码2】:
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
if not a:
return b
if not b:
return a
a_len = len(a)
b_len = len(b)
a = list(a)
b = list(b)
if a_len > b_len:
for i in range(0, a_len - b_len):
b.insert(0, '0')
if b_len > a_len:
for i in range(0, b_len - a_len):
a.insert(0, '0')
carry = 0
c = []
for i in range(1, len(a) + 1):
if a[-i] == '1' and b[-i] == '1':
c.insert(0, str(0 + carry))
carry = 1
elif a[-i] == '0' and b[-i] == '0':
c.insert(0, str(0 + carry))
carry = 0
else:
if carry == 1:
c.insert(0,str(0))
carry = 1
else:
c.insert(0, str(1))
carry = 0
if carry == 1:
c.insert(0,'1')
return ''.join(c)