您的位置:首页 > 其它

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

2017-06-13 10:28 344 查看
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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: