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] #添加是从右往左,输出的时候需要进行翻转 |