Leetcode练习<十五>二进制数相加

来源:互联网 发布:茵曼官方旗舰店淘宝 编辑:程序博客网 时间:2024/06/05 16:21
class Solution(object):    # 转换成一样长度的列表    def convert2SameLength(self, a, b):        a = list(a)        b = list(b)        length = max(len(a), len(b))        for i in range(0, abs(len(a) - len(b))):            if len(a) > len(b):                b.insert(i, 0)            elif len(a) < len(b):                a.insert(i, 0)        return a, b    def addBinary(self, a, b):        a, b = self.convert2SameLength(a, b)        c = []        step = 0        for i in range(len(a) - 1, -1, -1):            if int(a[i]) + int(b[i]) == 2:    # 都为1的时候                # print('step:', step, 'a[i]', a[i], 'b[i]', b[i])                c.insert(0, str(step))                step = 1                # print(c)            elif int(a[i]) + int(b[i]) == 1:  # 一个为1, 一个为0的时候                # print('step:', step, 'a[i]', a[i], 'b[i]', b[i])                c.insert(0, str(0 if 1 + step == 2 else 1))                step = (1 if 1 + step == 2 else 0)                # print(c)            else:                              # 都为0的时候                # print('step:', step, 'a[i]', a[i], 'b[i]', b[i])                c.insert(0, str(step))                step = 0                # print(c)        if step == 1:            c.insert(0, str(step))        return ''.join(c)    # 大神写的还没看懂    def addBinary1(self, a, b):        if len(a) == 0: return b        if len(b) == 0: return a        if a[-1] == '1' and b[-1] == '1':            return self.addBinary(self.addBinary(a[0:-1], b[0:-1]), '1') + '0'        if a[-1] == '0' and b[-1] == '0':            return self.addBinary(a[0:-1], b[0:-1]) + '0'        else:            return self.addBinary(a[0:-1], b[0:-1]) + '1'if __name__ == '__main__':    a = '111'    b = '11'    s = Solution()    # a, b = s.convert2SameLength(a, b)    print(s.addBinary1(a, b))
原创粉丝点击