leetcode_201. 数字范围按位与 python3

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。

  • 示例 1: 

输入: [5,7]
输出: 4

  • 示例 2:

输入: [0,1]
输出: 0

二、解题思路

1.由于二进制每次加1,数字不是1变为0就是0变为1,因此按位与只需要找到最高几位即可。

2.可以通过对较小的数m较大的数n同时逐次移位来寻找相同的一个或几个高位。

3.如果较小的数m的已经为0,则不需要再去使得n逐次移位(break),因为只有当n也为0时才跳出循环,即m和n没有高几位相等,按位与结果为0。

例子:

【5, 7】—— 2                

5:0 1 0 1

6:0 1 1 0

7:0 1 1 1

——————

2:0 1 0 0

【5 ,8】—— 0

5:0 1 0 1

6:0 1 1 0

7:0 1 1 1

8:1 0 0 0

——————

2:0 0 0 0

【13,15】—— 12

13:1 1 0 1

14:1 1 1 0

15:1 1 1 1

——————

12:1 1 0 0

 

三、代码

class Solution:
    def rangeBitwiseAnd(self, m: int, n: int) -> int:
        i = 0
        while m != n:
            m >>= 1
            n >>= 1
            i += 1
            if m == 0:
                break
        return m << i


if __name__ == '__main__':
    test = [13, 15]
    m = test[0]
    n = test[1]

    s = Solution()
    ans = s.rangeBitwiseAnd(m, n)
    print(ans)
悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值