leetcode_201. 数字范围按位与 python3

举报
悲恋花丶无心之人 发表于 2021/02/04 01:16:23 2021/02/04
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。 示例 1:  输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 二、解题思路 1.由于...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给定范围 [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

 

三、代码


  
  1. class Solution:
  2. def rangeBitwiseAnd(self, m: int, n: int) -> int:
  3. i = 0
  4. while m != n:
  5. m >>= 1
  6. n >>= 1
  7. i += 1
  8. if m == 0:
  9. break
  10. return m << i
  11. if __name__ == '__main__':
  12. test = [13, 15]
  13. m = test[0]
  14. n = test[1]
  15. s = Solution()
  16. ans = s.rangeBitwiseAnd(m, n)
  17. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108205590

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。