涉及到位操作的题想想能不能用mask做。只要某一位上出现过0那么这一位就置0。
- 先考虑最低位,第‘0位’,想想是不是只要m不等于n,那么肯定出现过0。
- 接下来考虑第‘1位’,想想我们第‘0位’是怎么做的。m!=n <-> (m&mask) != (n&mask),mask=2**31-1. 现在将第‘1位’当做第‘0位’来做,mask左移一位。
- 第‘2位’,mask继续左移一位。
class Solution(object):
def rangeBitwiseAnd(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
d=2**31-1
while (m&d) != (n&d):
d<<=1
return (m&d)