leetcode_201. 数字范围按位与 python3
【摘要】 目录
一、题目内容
二、解题思路
三、代码
一、题目内容
给定范围 [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
三、代码
-
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)
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/108205590
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)