最后更新于6年前
思路是找出m和n相同和不同的部分。相同部分与之后结果不变,不同部分与结果为0。每次n,m左移一位,直到n==m,用move来统计移动的位数(不同的位数)。最后用m*move还原(即给m补0)。
class Solution: def rangeBitwiseAnd(self, m: int, n: int) -> int: #边界,不加也行,不过慢 if m == 0: return 0 move = 1 while n != m: n >>= 1 m >>= 1 move <<= 1 return m * move