一、题设
给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1" 输出:"100"
示例 2:
输入:a = "1010", b = "1011" 输出:"10101"
二、基本思路
这题基本类同Topic66. 加一,不同的是这里按字符串存储,有不够位的情况。例如 a =" 101",b = "11",当第三次相加使b就没有值了。于是我们当其中一个字符串下标走到头了,那么另一个数就作为两个相加的和,再进行进位和保留当前位的操作。
三、代码实现
def addBinary(self, a, b):
m , n = len(a)-1 , len(b)-1
res =""
tag = 0
while m >= 0 or n >= 0:
if m>= 0 and n >= 0:
tmp = int(a[m]) + int(b[n]) + tag
if m<0:
tmp = int(b[n]) + tag
if n<0:
tmp = int(a[m]) + tag
if tmp >= 2:
res = str(tmp-2) + res
tag = 1
else:
res = str(tmp) + res
tag = 0
m -= 1
n -= 1
if tag:
res = "1" + res
return res
四、效率总结