Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬의 바이너리 갭

<시간/>

양의 정수 N이 있다고 가정하고 N의 이진 표현에서 두 개의 연속 1 사이의 가장 긴 거리를 찾아야 합니다. 두 개의 연속 1이 없으면 0을 반환합니다.

따라서 입력이 22와 같으면 출력은 2가 됩니다. 이진법의 22는 10110이기 때문입니다. 22의 이진법 표현에는 세 개의 1이 있고 1의 두 개의 연속 쌍이 있습니다. 첫 번째 연속 쌍의 거리가 2이고 두 번째 연속 1 쌍의 거리가 1입니다. 답변은 이 두 거리 중 가장 큰 거리인 2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • K :=N의 이진 표현 비트 목록 만들기
  • 최대:=0, C:=0, S:=0
  • 플래그 :=거짓
  • 0에서 K 크기의 범위에 있는 i에 대해 다음을 수행합니다.
    • K[i]가 '1'이고 C가 0이고 플래그가 False이면
      • C:=나
      • 플래그 :=참
    • 그렇지 않으면 K[i]가 '1'이고 플래그가 지정되면
      • S:=나
      • 최대
      • 최대 :=|S-C|
    • C:=S
  • 최대 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

    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