leetcode刷題-67二進位制求和
阿新 • • 發佈:2020-08-07
題目
給你兩個二進位制字串,返回它們的和(用二進位制表示)。
輸入為 非空 字串且只包含數字1和0。
示例1:
輸入: a = "11", b = "1"
輸出: "100"
思路
位運算:
以13的二進位制為0000 1101,9的二進位制為0000 1001為例子
-
不考慮進位,分別對各位數進行相加:
sum = 0000 1101 + 0000 1001 = 0000 0100 -
考慮進位:
有兩處進位,第0位和第3位,只考慮進位的結果為:
carry = 0001 0010 -
在步驟2中carry == 0 ?若不為0,重複步驟1 、2 、3;為0則結束,結果為sum:
本例中,
(a)不考慮進位sum = 0001 0110;
(b)只考慮進位carry = 0;
(c)carry == 0,結束,結果為sum = 0001 0110
因此可以通過位運算來完成計算
實現
class Solution: def addBinary(self, a: str, b: str) -> str: num1 = int(a,2) num2 = int(b,2) sum = num1 ^ num2; carry = (num1 & num2) << 1; while carry != 0: a = sum; b = carry; sum= a ^ b; carry = (a & b) << 1; return bin(sum)[2:]