给定两个 01 字符串 a
和 b
,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "10" 输出: "101"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
class Solution:
def addBinary(self, a: str, b: str) -> str:
# 确保 a 和 b 的长度相同,通过在较短的字符串前面填充 0
max_len = max(len(a), len(b))
a = a.zfill(max_len)
b = b.zfill(max_len)
carry = 0 # 进位
result = [] # 存储结果的列表
# 从最后一位开始逐位相加
for i in range(max_len - 1, -1, -1):
# 将字符转换为整数进行计算
sum_ = int(a[i]) + int(b[i]) + carry
# 计算当前位的结果和新的进位
result.append(str(sum_ % 2))
carry = sum_ // 2
# 如果最后还有进位,添加到结果中
if carry:
result.append('1')
# 结果列表反转并转换为字符串
return ''.join(result[::-1])