【LeetCode】201. Bitwise AND of Numbers Range 解題報告(Python)

【LeetCode】201. Bitwise AND of Numbers Range 解題報告(Python)

 


題目地址:https://leetcode.com/problems/bitwise-and-of-numbers-range/description/數組

題目描述:

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.ide

For example, given the range [5, 7], you should return 4.this

題目大意

計算區間[m,n]內全部數字的與。code

解題方法

看題感受須要對全部的[m,n]範圍內的數字進行遍歷一遍吧。。其實不須要的。ip

咱們知道,數組的數字是連續的,那麼m,n範圍內的二進制表示的末尾相同位置必定會出現不一樣的0,1.咱們只要找出m,n的作左邊起的最長相同的二進制頭部便可呀。leetcode

如[5, 7]裏共有三個數字,分別寫出它們的二進制爲:get

101  110  111it

相與後的結果爲100,仔細觀察咱們能夠得出,最後的數是該數字範圍內全部的數的左邊共同的部分(即m,n左邊的共同部分),若是上面那個例子不太明顯,咱們再來看一個範圍[26, 30],它們的二進制以下:io

11010  11011  11100  11101  11110class

也是前兩位是11,後面3位在不一樣數字中必定會出現0和一、相與即爲0了。

個人作法是把m,n同時向右平移,直到二者相等(頭部相同了),再把最後的結果向左平移相同的步數。

 

代碼:

class Solution(object):
    def rangeBitwiseAnd(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int
        """
        i = 0
        while m != n:
            m >>= 1
            n >>= 1
            i += 1
        return m << i

日期

2018 年 3 月 9 日