給定範圍 [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 ...