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 |
|