201. 数字范围按位与

https://leetcode-cn.com/problems/bitwise-and-of-numbers-range/

解法一:

思路是找出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

最后更新于