1. 程式人生 > 其它 >201.數字範圍按位與

201.數字範圍按位與

技術標籤:LeetCodeleetcode

給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。

int rangeBitwiseAnd(int m, int n){
    char offset = 0;
    for(; m != n; ++offset)
    {
        m >>= 1;
        n >>= 1;
    }

    return n << offset;
}

思路:連續數字按位與,假如其中的一位出現0,那麼這位就不需要在進行運算。

在這裡插入圖片描述
那麼可以理解成最後的有效位就是這些數字的公共位,就是有有一段範圍內的資料這些數字都是為1
在這裡插入圖片描述
可以看到最後輸出的就是公共都為1的位置。那麼也可以理解成尋找m, n兩個位置的連續的公共位都相同的位置,最後再輸出。