Leetcode Day18 1
868. 二進制間距
給定一個正整數(shù) n,找到并返回 n 的二進制表示中兩個 相鄰 1 之間的 最長距離 。如果不存在兩個相鄰的 1,返回 0 。
如果只有 0 將兩個 1 分隔開(可能不存在 0 ),則認為這兩個 1 彼此 相鄰 。兩個 1 之間的距離是它們的二進制表示中位置的絕對差。例如,"1001" 中的兩個 1 的距離為 3 。

我的第一反應(yīng)是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更新為當(dāng)前的位數(shù),并更新ans
