memory位运算

位运算题型:怎么识别、怎么讲、怎么练

位运算真正有价值的场景,是题目本身就在二进制状态层面:开关、子集、奇偶、掩码、压缩转移。关键不是炫技,而是判断它是否真的让模型更简单。

覆盖题量

30+

推荐起手

先决定每一位表示成员、奇偶,还是状态标记。

高频误区

只有位技巧,没有模型支撑。

什么时候该想到这个模式

题目显式在讲子集、掩码、奇偶或二进制状态。
n 很小,暗示可以用状态压缩枚举子集。
XOR、AND、bit count 可以替代更重的结构。

下手前的检查清单

先决定每一位表示成员、奇偶,还是状态标记。
写代码前最好手算一个 mask 样例。
注意不同语言里的符号位和移位行为。
宁可用能解释清楚的位操作,也别硬背魔法表达式。

真正适合面试表达的解题步骤

1

先定义每一位的语义。

2

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

3

如果 n 足够小,就用 mask 压缩状态。

4

先手推一两个例子验证。

5

最终代码必须还能用自然语言解释清楚。

常见变体

唯一数逻辑

用 XOR 抵消重复项并保留目标值。

状态压缩枚举

用 bit 表示一个子集或配置。

位压 DP / 转移

当维度较小时,用 mask 做 DP 状态。

模板预览

Python公开预览
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

更像真实刷题路径的推荐题单

这组题不是随机罗列,而是按“先建立识别感,再补关键变体,最后上强度”去排,适合真的拿来做一轮 pattern 复习。

高频坑点

warning

只有位技巧,没有模型支撑。

warning

混合表达式里忘了运算优先级。

warning

固定宽度整数语言里忽略符号位问题。

warning

明明数组或 set 更简单,却非要位运算。

练习顺序建议

1

先做 single number 和 counting bits。

2

再刷不用加号求和和子集枚举。

3

然后补简单的位压 DP。

4

最后再做更复杂的状态压缩题。

位运算题型总结 | LeetCode 高频面试模式 - Interview AiBox