Leetcode Day18 1
868. 二进制间距
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

我的第一反应是lowbit。。就这么写了,感觉绕了一大圈
class Solution:
def binaryGap(self, n: int) -> int:
def lowbit(n):
return n&(-n)
def getN(a):
tmp=0
while a!=1:
a=a//2
tmp+=1
return tmp
res=[]
while n:
lowb=lowbit(n)
n-=lowb
tmp=getN(lowb)
res.append(tmp)
max=0
for i in range(len(res)-1):
if abs(res[i]-res[i+1])>=max:
max=abs(res[i]-res[i+1])
return max

看看题解:
n&1获取最低位(和00001&可以获得最低位)
如果为0则右移,如果为1,Last更新为当前的位数,并更新ans
