思想:
将通过补零的方式使得字符串a和字符串b长度一致,然后从字符串a和字符串b最后一位和进位carry进行加,然后判断属于哪种情况,最后注意如果carry为1需要加入
class Solution:
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
carry = 0
c = []
a = a.zfill(max(len(a), len(b)))
b = b.zfill(max(len(a), len(b)))
for i in range(-1, -(len(a)+1), -1):
if int(a[i])+int(b[i])+carry == 2:
c.insert(i, '0')
carry = 1
elif int(a[i])+int(b[i])+carry == 3:
c.insert(i, '1')
carry = 1
elif int(a[i])+int(b[i])+carry == 1:
c.insert(i, '1')
carry = 0
else:
c.insert(i, '0')
carry = 0
if carry == 1:
c.insert(0, '1')
return "".join(c)
if __name__ == "__main__":
print(Solution().addBinary("100", "110010"))
小菜鸟的思想还是对的,只是用的方法有点浪费时间,接下来仿照大佬的编程习惯进行改进
class Solution:
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
carry = 0
c = ''
a = a.zfill(max(len(a), len(b)))
b = b.zfill(max(len(a), len(b)))
for i in range(-1, -(len(a)+1), -1):
if int(a[i])+int(b[i])+carry == 2:
c += '0'
carry = 1
elif int(a[i])+int(b[i])+carry == 3:
c += '1'
carry = 1
elif int(a[i])+int(b[i])+carry == 1:
c += '1'
carry = 0
else:
c += '0'
carry = 0
if carry == 1:
c += '1'
return c[::-1]
似乎快了一些些