67. Add Binary

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        alist = [int(i) for i in list(str(a))]
        blist = [int(i) for i in list(str(b))]

        lengtha = len(alist)
        lengthb = len(blist)
        if lengtha < lengthb:
            alist, blist = blist, alist
            lengtha, lengthb = lengthb, lengtha

        c=''
        carry = 0
        for i in range(lengthb):
            if alist[::-1][i] + blist[::-1][i] + carry >= 2:
                tmp = str(alist[::-1][i] + blist[::-1][i] + carry - 2)
                c += tmp
                carry = 1
            else:
                tmp = (alist[::-1][i] + blist[::-1][i] + carry)
                tmp = str(tmp)
                c += tmp
                carry = 0

        if carry == 1:
            for i in range(lengthb,lengtha):
                if alist[::-1][i] + carry == 2:
                    c += '0'
                    carry = 1
                else:
                    tmp = (alist[::-1][i] + carry)
                    tmp = str(tmp)
                    c += tmp
                    carry = 0
            if carry == 1:
                c += '1'

        else:
            for i in range(lengthb,lengtha):
                c += str(alist[::-1][i])

        return c[::-1]

if __name__ == "__main__":
    answer=Solution()
    print answer.addBinary('101111','10')

blogroll

social