python leetcode 201. Bitwise AND of Numbers Range

涉及到位操作的题想想能不能用mask做。只要某一位上出现过0那么这一位就置0。

  1. 先考虑最低位,第‘0位’,想想是不是只要m不等于n,那么肯定出现过0。
  2. 接下来考虑第‘1位’,想想我们第‘0位’是怎么做的。m!=n <-> (m&mask) != (n&mask),mask=2**31-1. 现在将第‘1位’当做第‘0位’来做,mask左移一位。
  3. 第‘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)

猜你喜欢

转载自blog.csdn.net/Neekity/article/details/85028776
今日推荐