1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution(object): def addBit(self, a, b, c): s = int(a) + int(b) + int(c) return divmod(s, 2)
def reverse(self, arr): n = len(arr) for i in xrange(n / 2): arr[i], arr[n - 1 - i] = arr[n - 1 - i], arr[i]
def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str """ m, n = len(a), len(b) if m > n: return self.addBinary(b, a)
rs = [] c = 0 for i in xrange(m): c, x = self.addBit(a[m - 1 - i], b[n - 1 - i], c) rs.append(str(x))
for i in xrange(m, n): c, x = self.addBit(b[n - 1 - i], 0, c) rs.append(str(x))
if c == 1: rs.append('1') self.reverse(rs) return ''.join(rs)
|