给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例

输入: a = "1010", b = "1011"

输出: "10101"

解析

1)二进制加法也是加法,其实是可以直接相加的 int(a, 2) + int(b, 2),但作为一个算法题,用系统函数显然不合适

2)不用系统函数的话,就按手算思路,从最后一位加起,该进位就进位即可

3)虽然这种解法排名不高,但没用系统函数,也兼顾了代码可读性,个人认为没毛病

代码示例

def addBinary(self, a: str, b: str) -> str:
    l = max(len(a), len(b))
    a = a.zfill(l)
    b = b.zfill(l)
    ans = []
    d = 0
    for i in range(-1, -(l+1), -1):
        d, m = divmod(int(a[i]) + int(b[i]) + d, 2)
        ans.append(m)
    if d != 0:
        ans.append(d)
    return ''.join(map(str, reversed(ans)))

a = "1010"
b = "1011"
print(addBinary(a, b))

执行用时:40 ms, 在所有 Python3 提交中击败了 46.80% 的用户.

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/363