题目定位
这题的二进制模型非常直接: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++ 在这题上有什么语言差异?
继续刷相关题
先把 位运算 这个模式刷成体系,再去做更难变体。