二进制间距
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-gap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
AC代码
class Solution:
def binaryGap(self, n: int) -> int:
s = bin(n)[2:]
maxl = 0
flag = 0
temp = 0
for l in s:
if l == '0' and flag == 1:
temp += 1
elif l == '1' and flag == 0:
flag = 1
temp = 1
elif l == '1' and flag == 1:
if temp > maxl :
maxl = temp
temp = 1
return maxl
官方代码
class Solution:
def binaryGap(self, n: int) -> int:
last, ans, i = -1, 0, 0
while n:
if n & 1:
if last != -1:
ans = max(ans, i - last)
last = i
n >>= 1
i += 1
return ans
# 作者:LeetCode-Solution
1、bin可以得到十进制数的二进制字符串,不过要注意最开始的地方有0b
2、使用位运算相当于可以减少O(log2(n))的空间复杂度
3、直接记录索引位置之差是个很好的选择,是两个思路,解题的时候有想到,只是两者之间并没有明显优劣,因此无妨。