Leetcode刷题记录——201. 数字范围按位与

Leetcode刷题记录——201. 数字范围按位与_第1张图片
参考官方解法
由于任何数与0结果为0
因此 我们需要找到所有数中在这一位都非0的位
即 找公共前缀

由于是连续数组
所以只需要找边界的两个值的公共前缀即可

我们只需要在m 一直将m和n右移
并用几个变量记录右移次数

最后 将m左移那个次数
即为所求

class Solution:
    def rangeBitwiseAnd(self, m: int, n: int) -> int:
        shift = 0   #记录右移次数
        # 找公共前缀那一位
        while m < n:
            m = m >> 1
            n = n >> 1
            shift += 1
        return m << shift

你可能感兴趣的:(leetcode,python编程技巧)