201. 数字范围按位与
题目描述
给你两个整数 left
和 right
,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left
、right
端点)。
示例 1:
输入:left = 5, right = 7 输出:4
示例 2:
输入:left = 0, right = 0 输出:0
示例 3:
输入:left = 1, right = 2147483647 输出:0
提示:
0 <= left <= right <= 231 - 1
解法
方法一:位运算
题目可以转换为求数字的公共二进制前缀。
当 \(left \lt right\) 时,我们循环将 \(right\) 的最后一个二进制位 \(1\) 变成 \(0\),直到 \(left = right\),此时 \(right\) 即为数字的公共二进制前缀,返回 \(right\) 即可。
时间复杂度 \(O(\log n)\),空间复杂度 \(O(1)\)。
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 |
|