#371
Medium
位运算

Sum of Two Integers

不使用 + 和 - 计算两个整数之和。

Bit Manipulation

题目定位

这题的二进制模型非常直接:XOR 给出无进位和,AND 再左移给出进位,然后不断合并直到进位为 0。

关键观察

和 = XOR,进位 = (AND << 1),重复直到进位为 0。

目标复杂度

O(1) / O(1)

这题的解法思路怎么拆

1

这题的二进制模型非常直接:XOR 给出无进位和,AND 再左移给出进位,然后不断合并直到进位为 0。

2

和 = XOR,进位 = (AND << 1),重复直到进位为 0。

3

先定义每一位的语义。

4

选一个最自然的位操作来更新该语义。

参考实现

Python
# Generic pattern template
x & (x - 1)        # clear lowest set bit
x & -x             # isolate lowest set bit
x | (1 << i)       # set bit i
x & ~(1 << i)      # clear bit i
x ^ (1 << i)       # toggle bit i
(x >> i) & 1       # read bit i

常见坑点

warning

照抄公式,却不理解 sum 和 carry 的不同角色。

warning

忽略某些语言里的固定宽度整数行为。

高频追问

你能用 1 位真值表解释这件事吗?

Python 和 C++ 在这题上有什么语言差异?

继续刷相关题

先把 位运算 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 371. Sum of Two Integers 题解思路 | Interview AiBox