201 數字範圍按位與

2021-10-10 19:55:46 字數 992 閱讀 9095

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

示例 1:

輸入: [5,7]

輸出: 4

示例 2:

輸入: [0,1]

輸出: 0

方法一:位移

思路鑑於上述問題的陳述,我們的目的是求出兩個給定數字的二進位制字串的公共字首,這裡給出的第乙個方法是採用位移操作。

我們的想法是將兩個數字不斷向右移動,直到數字相等,即數字被縮減為它們的公共字首。然後,通過將公共字首向左移動,將零新增到公共字首的右邊以獲得最終結果。

演算法如上述所說,演算法由兩個步驟組成:

我們通過右移,將兩個數字壓縮為它們的公共字首。在迭代過程中,我們計算執行的右移運算元。

將得到的公共字首左移相同的運算元得到結果。

class

solution

return m << shift;

}}

方法二:brian kernighan 演算法

思路與演算法

還有乙個位移相關的演算法叫做「brian kernighan 演算法」,它用於清除二進位制串中最右邊的 11。

brian kernighan 演算法的關鍵在於我們每次對 \textitnumber 和 \textit-1number−1 之間進行按位與運算後,\textitnumber 中最右邊的 11 會被抹去變成 00。

基於上述技巧,我們可以用它來計算兩個二進位制字串的公共字首。

其思想是,對於給定的範圍 [m,n][m,n](mclass

solution

return n;

}}

201 數字範圍按位與

給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5,7 輸出 4 示例 2 輸入 0,1 輸出 0 1.暴力 2.規律,len n len m return 0 len n len m 將m,n 二進位制,m和n從左起相同...

位運算 201 數字範圍按位與

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

201 數字範圍按位與 lecot

給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5,7 輸出 4 示例 2 輸入 0,1 輸出 0 思路 1.這道題剛看見時,很容易想到迭代所有的數字進行按位與,但因為次數太多會超時 解題規律 sss0 x,sss1 x ...