classSolution: defbinaryStr2Decima(self, s): count = 0 res = 0 for i inrange(len(s)-1, -1, -1): res += (int(s[i]) * (2 ** count)) count += 1
return res
defaddBinary(self, a: str, b: str) -> str: # 2进制转10进制 a = self.binaryStr2Decima(a) b = self.binaryStr2Decima(b) # 相加 sum = a + b # 10进制转2进制 sum = str(bin(sum))[2:] returnsum
# 另一种简洁的写法 classSolution: defaddBinary(self, a, b) -> str: return'{0:b}'.format(int(a, 2) + int(b, 2))
classSolution: defaddBinary(self, a: str, b: str) -> str: res = "" m = len(a) - 1 n = len(b) - 1 carry = 0 while m >= 0or n >= 0: p = 0if m < 0or a[m] == '0'else1 q = 0if n < 0or b[n] == '0'else1 sum = p + q + carry res = str(sum % 2) + res # 放在res前面的位置 carry = sum // 2# 注意这里用整除 m -= 1 n -= 1
return"1" + res if carry == 1else res # 最后还要判断下carry,如果为1的话,要在结果最前面加上一个1。
if __name__ == "__main__": solution = Solution() for i inrange(len(Input)): print("-"*50) reslut = solution.addBinary(Input[i], Input1[i]) if reslut == Answer[i]: print(True) else: print(False) print(Input[i])
时间复杂度:\(O(max(N,M))\),其中 N 和 M 是输入字符串 a 和 b 的长度。
空间复杂度:\(O(max(N,M))\),存储求和结果。
执行用时 :48 ms, 在所有 Python3 提交中击败了27.90%的用户
内存消耗 :13.5 MB, 在所有 Python3 提交中击败了5.01%的用户
方法三的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution: defaddBinary(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 returnbin(x)[2:]
# 另外一个四行代码的版本 classSolution: defaddBinary(self, a, b) -> str: x, y = int(a, 2), int(b, 2) while y: x, y = x ^ y, (x & y) << 1 returnbin(x)[2:]
时间复杂度:\(O(N+M)\),其中 NN 和 MM 是输入字符串 aa 和 bb 的长度。 空间复杂度:\(O(max(N,M))\),存储计算结果。 执行用时 :36 ms, 在所有 Python3 提交中击败了75.62%的用户 内存消耗 :13.3 MB, 在所有 Python3 提交中击败了5.01%的用户