67. 二进制求和 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101"
class Solution: def addBinary(self, a, b) -> str: x, y = int(a, 2), int(b, 2) while y: answer = x ^ y carry = (x & y) << 1 x, y = answer, carry return bin(x)[2:]
思考:
把 a 和 b 转换成整型数字 x和 y,在接下来的过程中,x保存结果,y保存进位。 当进位不为 00 时 计算当前 x 和 y 的无进位相加结果:answer = x ^ y 计算当前 x 和 y 的进位:carry = (x & y) << 1 完成本次循环,更新 x = answer,y = carry 返回 x 的二进制形式
使用int()函数将二进制字符串a与b转换为十进制数,再把a与b相加后使用bin函数转换为二进制数
注意a,b必须是字符串类型。否则报错: int() can't convert non-string with explicit base
^异位处理,
&同真为真,其他为假
取bin(x)[2:],是为了解决二进制的标志问题:
>>> bin(10)[:]
'0b1010'
运算符链接: