假设我们有一个正整数N,我们必须在N的二进制表示形式中找到两个连续的1之间的最长距离。如果没有两个连续的1,则返回0。
因此,如果输入像22,则输出将为2,因为二进制数22中的22是10110。在二进制表示22中有3个,以及两个连续的1对。第一对连续的1的距离为2,第二对连续的1的距离为1。答案将是这两个距离中的最大值,即2。
为了解决这个问题,我们将遵循以下步骤-
K:=列出N的二进制表示的位的列表
最大:= 0,C:= 0,S:= 0
标志:= False
对于0到K大小的i,执行
S:=我
如果Max <abs(SC),则
C:= S
最大值:= | SC |
C:=我
标志:=真
如果K [i]为'1'并且C为0并且Flag为False,则
否则,当K [i]为“ 1”并标记时,则
返回最大值
让我们看下面的实现以更好地理解-
class Solution: def binaryGap(self, N): B = bin(N).replace('0b','') K = str(B) K = list(K) Max = 0 C = 0 S =0 Flag =False for i in range(len(K)): if K[i] is '1' and C is 0 and Flag is False: C=i Flag = True elif K[i] is '1' and Flag: S=i if Max<abs(S-C): Max = abs(S-C) C=S return Max ob = Solution()print(ob.binaryGap(22))
22
输出结果
2