·67二进制求和
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"
·解题思路
1.先补齐,使用函数list.rjust(length,num)——表示右对齐,左补0
2.从高位往低位遍历,运算结果是last = (int(a[i]) + int(b[i]) + carry) %2 , 相加结果对2取余作为留下的余数。进位数为,carry= (int(a[i]) + int(b[i]) + carry) // 2, 相加结果整除2作为进位位
3.若是遍历到最后还有进位位,那么进位数放在last结果的最前边,用insert()函数,插入
·代码
class Solution(object):
def addBinary(self, a, b):
def addzereo(a,b):
a_size = len(a)
b_size = len(b)
max = a_size if a_size >= b_size else b_size
a = a.rjust(max, '0')
b = b.rjust(max, '0')
return a,b
def convert_to_num(lst):
num_str = ''.join(str(digit) for digit in lst)
num_str = str(num_str)
return num_str
a,b = addzereo(a,b)
last = []
carry = 0
for i in range(len(a) -1 ,-1, -1):
digit_num = int(a[i]) + int(b[i]) +carry
last.insert(0, digit_num % 2)
carry = digit_num // 2
if carry :
last.insert(0,carry)
result = convert_to_num(last)