给你两个整数 left
和 right
,表示区间 [left, right]
,返回此区间内所有数字 按位与 的结果(包含 left
、right
端点)。
例:
输入:left = 5, right = 7 输出:4
# 解析:因为0与任何值与都为0,而这个区间又是连续的,所以只需要判断头和尾的最小公共前缀即可,中间部分一定会被0消掉。如图:
class Solution(object):
def rangeBitwiseAnd(self, left, right):
"""
:type left: int
:type right: int
:rtype: int
"""
i = 0 # 位数计数
while left != right: # 当边界不相同时
left >>= 1 # 左边界右移一位
right >>= 1 # 右边界右移一位
i += 1 # 计数器加一
return left << i # 想等后再左移之前移动的位数即可