數字範圍按位與(位運算 思維)

2021-10-04 01:14:57 字數 360 閱讀 1850

題目:

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

思路:一種直觀解法是將(n,m)的不同地位部分都變為0,可以逐位右移,再左移回來即可,這個做法挺快的。

而還有一種可以利用我們的樹狀陣列的lowbit來搞,如下。

class

solution

};

更快的做法

class

solution

intalloneafterhighestbit

(int i)

}

位運算 201 數字範圍按位與

給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5 7 輸出 4示例 2 輸入 0 1 輸出 0解題 方法1 位移 所有數字按位與,即找到所有數字的公共字首 所有數字的公共字首,即最大和最小數字的公共字首 故將m和n右移,...

數字範圍按位與

給定乙個範圍 m,n 0 m,n 2147483647,返回此閉區間內的所有數字進行與運算後的結果。這是一道leetcode上的經典題目,下面我將介紹兩種解法,當然有興趣的可以去原 看一下具體題目和官方解答。這種解法是最簡單的,包括我一開始也是這樣做的。具體 如下 class solution 時間...

201 數字範圍按位與

給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5,7 輸出 4 示例 2 輸入 0,1 輸出 0 方法一 位移 思路鑑於上述問題的陳述,我們的目的是求出兩個給定數字的二進位制字串的公共字首,這裡給出的第乙個方法是採用位移...