對兩個二進制的字符串求和。
注意點:
最高位進位例子:
輸入: a = “111”, b = “1”
輸出: “1000”
從後往前依次相加,通過二進制來計算該位的值和進位值。如果最高位還有進位要添加一個位,最後把結果翻轉。
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
result = []
carry = val = 0
if len(a) < len(b):
a, b = b, a
lengthA = len(a)
lengthB = len(b)
for i in range(lengthA):
val = carry
val += int(a[-(i + 1)])
if i < lengthB:
val += int(b[-(i + 1)])
carry, val = val // 2, val % 2
result.append(str(val))
if carry:
result.append(str(carry))
return "".join(result[::-1])
if __name__ == "__main__":
assert Solution().addBinary("111", "1") == "1000"