给定两个二进制字符串,返回他们的和(也是一个二进制字符串)。
输入的字符串都是非空的,并且只包含1或0。
示例:
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
思路
按照手算加法的步骤,从最低位开始,同位相加,并考虑是否有进位。
与 Leetcode算法——66、加1(plus one) 类似,都是使用了手动加法从低位到高位相加,但是本题是二进制相加,因此需要将满10进1改为满2进1。
python实现
def addBinary(a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
# 保证a的长度小于等于b的长度
if len(a) > len(b):
a,b = b,a
# 从最低位开始加起
la, lb = len(a), len(b)
a = '0' * (lb-la) + a # 两个字符串长度相同,高位补0
add_one = 0 # 进位
result = ''
for i in range(lb-1, -1, -1):
s = int(a[i]) + int(b[i]) + add_one
add_one, s = divmod(s, 2)
result += str(s)
if add_one == 1: # 最高位补位
result += '1'
return result[::-1]
if '__main__' == __name__:
a = "1010"
b = "1011"
print(addBinary(a, b))

本文介绍了一种解决二进制字符串相加问题的方法。通过从最低位开始,逐位相加并处理进位,实现了两个二进制字符串的加法运算。示例包括输入为11和1,输出为100;输入为1010和1011,输出为10101。
193

被折叠的 条评论
为什么被折叠?



