中等 201 數字範圍按位與

2022-06-09 08:15:09 字數 673 閱讀 3047

leetcode201

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

示例 1: 

輸入: [5,7]

輸出: 4

示例 2:

輸入: [0,1]

輸出: 0

該題在於找出m和n的公共字首,在按n的位數往後面補齊0.

m到n之間的數都有該字首,則按位與操作使得這些字首保持不變。而字首後一位數m為0,n為1,無論m、n該位後面的數字為多少,

在m到n之間一定存在乙個數,其在字首後面的數為1000... 該數與m按位與得到(字首0000...)

尋找公共字首有兩個方法,和(計數二進位制數字中1的個數)該題類似。

位移m和n同時向右位移,直到m、n相等時,餘下的為字首。

public int rangebitwiseand(int m, int n) 

n <<= count;

return n;

}

bk演算法

n=n&(n-1)使得n將最右邊的1轉化為0。當n<=m時,n字首後面的數已經全為0.直接返回.

public int rangebitwiseand(int m, int n)

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