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))
Leetcode练习<十五>二进制数相加
最新推荐文章于 2021-12-02 08:56:24 发布