022-力扣刷题-二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1" 输出: "100" 示例 2:

输入: a = "1010", b = "1011" 输出: "10101"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        result,carry,val="",0,0 #结果,进位,当前值
        for i in range(max(len(a),len(b))): #取得是最大长度的作为循环的次数
            val=carry  #这里的原因是后面的carry为直接复制给val作为下一位加减的初始值
            if i <len(a):
                val+=int(a[-(i+1)]) #从右往左算
            if i<len(b):  #假如b比较短的话使用这个-(i+1)也同样满足从右向左取数字
                val+=int(b[-(i+1)])
            carry,val=val//2,val%2  #val//2 如果结果是2//2那么就是carry=1就要进位如果是1//2那么就是0还是不会进位的.对于val来说如果是2%2那么余下的就是0说明进位了,如果没有进位求余后就是1
            result += str(val) #将最后这一位加的运算结果进行添加
        if carry:  #运算到了最后的时候如果有进位的话,那么就多添加一位
            result+=str(1)
        return result[::-1]  #添加是从右往左,输出的时候需要进行翻转