Leetcode 201. Bitwise AND of Numbers Range
题目描述:返回一个
[m,n]
的逻辑与的结果。
题目链接:Leetcode 201. Bitwise AND of Numbers Range
题目思路第一反应就是一个列表,然后reduce,想不到在8255的时候超时了0-2^31。
正确思路:
这种对位操作,要么左移,要么右移,有么要看最高位,要么要看最低位,如何置出某个数字中特定的位是需要技巧的,看到32位想到mask 11111...
参考代码
class Solution:
def rangeBitwiseAnd(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
i = 0
while(m!=n):
m >>=1
n >>=1
i += 1
m <<= i
return m
用32位1做掩摸按位与得出结果,然后不断左移掩摸。
class Solution:
def rangeBitwiseAnd(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
mask = (1 << 31) - 1
while((m & mask)!=(n & mask)):
mask <<= 1 #mask 左移来得到最高位
return mask & m
利用n&n-1的技巧来去掉最低位的1 然后向左区间靠近。
class Solution:
def rangeBitwiseAnd(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
while m < n: n &= n - 1
return n
参考链接
LeetCode Bitwise AND of Numbers Range 数字范围位相与