一、问题描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
二、代码和思路
1.首先记录两个字符串长度的大小,取长度大的字符串为c,并创建一个空列表用来存储没对应位二进制相加的结果
2.从后往前遍历两个字符串直到遍历完其中一个字符串为止,用二进制加法并将结果存储到lst中,必要的话改变标志位flag
3.从后往前从lst中取元素,用str的加法结合所有元素返回
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
m,n=len(a),len(b)
lst=[]
c=a if m>n else b
i=-1
j=-min(m,n)
flag=0
while i>=j:
if a[i]=='1' and b[i]=='1':
lst.append(flag)
flag=1
elif (a[i]=='1' and b[i]=='0') or (b[i]=='1' and a[i]=='0'):
lst.append(abs(flag-1))
else:
lst.append(flag)
flag=0
i -= 1
while i>=-len(c):
if c[i]=='1':
lst.append(abs(flag-1))
else:
lst.append(flag)
flag=0
i -= 1
if flag==1:lst.append(flag)
return_str=''
for i in range(len(lst)-1,-1,-1):
return_str += str(lst[i])
return return_str
三、运行结果