Python中的二进制差距

假设我们有一个正整数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