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