201數字範圍按位與(位移 數學 位運算)

2021-10-06 21:52:05 字數 645 閱讀 1087

1、題目描述

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

2、示例

輸入: [5,7]

輸出: 4

3、題解

解法一:

基本思想:位移,不斷右移查詢公共字首,將兩個數字向右移動,直到數字相等,即數字被縮減為它們的公共字首。然後,通過將公共字首向左移動,將零附加到公共字首以獲得最終結果。

解法二:

基本思想:數學+位運算,與運算是遇0則0,所以只需要考慮數m為1的位,因為32位數每一位01間隔的規律是pow(2,i),所以如果m的第i位是1,那麼當從m到n的距離大於這個間隔pow(2,i),說明m到n之間肯定會遇到0,則重置第i位位0;如果m的第i位是0,就不用變所以不需要考慮。

#include#include#include#includeusing namespace std;

class solution

} return static_cast(res.to_ulong());

}};class solution1

return m << shift;

}};int main()

201 數字範圍按位與

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

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右移,...