跳至主要內容

剑指 Offer II 002. 二进制加法

ITCharge大约 1 分钟

剑指 Offer II 002. 二进制加法open in new window

  • 标签:位运算、数学、字符串、模拟
  • 难度:简单

题目链接

题目大意

给定两个二进制数的字符串 ab

要求:计算 ab 的和,返回结果也用二进制表示。

解题思路

这道题可以直接将 ab 转换为十进制数,相加后再转换为二进制数。

也可以利用位运算的一些知识,直接求和。

因为 ab 为二进制的字符串,先将其转换为二进制数。

本题用到的位运算知识:

  • 异或运算 x ^ y :可以获得 x + y 无进位的加法结果。
  • 与运算 x & y:对应位置为 1,说明 xy 该位置上原来都为 1,则需要进位。
  • 座椅运算 x << 1:将 a 对应二进制数左移 1 位。

这样,通过 x ^ y 运算,我们可以得到相加后无进位结果,再根据 (x & y) << 1,计算进位后结果。

进行 x ^ y(x & y) << 1操作之后判断进位是否为 0,若不为 0,则继续上一步操作,直到进位为 0

最后将其结果转为 2 进制返回。

代码

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        x = int(a, 2)
        y = int(b, 2)
        while y:
            carry = ((x & y) << 1)
            x ^= y
            y = carry
        return bin(x)[2:]