Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
两个二进制数相加~ 做法和Add Two Numbers类似~从低位开始,一直相加并且维护进位~时间复杂度为O(max(m, n))~
细节注意点:用list存放每一位相加得到的sum, 而非用string来存放(res = '')然后用‘+’来连接字符串,因为string在Python中是不可变的,每一个"+"操作都会创建一个新的字符串并复制旧内容,所以这样效率不高~ 还有,注意list.insert()的时间复杂度是O(n),所以这儿是用append(),然后再reverse一下~
class Solution:
# @param a, a string
# @param b, a string
# @return a string
def addBinary(self, a, b):
if a is None or len(a) == 0: return b
if b is None or len(b) == 0: return a
i, j = len(a) - 1, len(b) - 1
res, carry = [], 0
while i >= 0 or j >= 0:
sum = carry
if i >= 0:
sum += int(a[i]) # can be sum += ord(a[i]) - ord('0')
i -= 1
if j >= 0:
sum += int(b[j])
j -= 1
carry = sum / 2
sum = sum % 2
res.append(str(sum))
if carry:
res.append(str(carry))
return ''.join(res[::-1])