201 數字範圍按位與

2021-10-23 17:07:25 字數 912 閱讀 4373

給定範圍 [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從左起相同再加上後面少0就是答案,本質就是找到公共字首

3.位運算

class solution:

def rangebitwiseand(self, m: int, n: int) -> int:

'''res=m

for i in range(m+1,n+1):

res&=i

return res

'''if m==0:return 0

if n==m:return n

m=bin(m)[2:]

n=bin(n)[2:]

if len(n)>len(m):return 0

res=""

for i in range(len(m)):

if m[i]==n[i]:

res+=m[i]

else:

break

res+="0"*(len(m)-i)

return int(res,2)

class solution:

def rangebitwiseand(self, m: int, n: int) -> int:

while m < n:

n = n & (n-1)

return 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 位移 所有數字按位與,即找到所有數字的公共字首 所有數字的公共字首,即最大和最小數字的公共字首 故將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 ...