[Codility][Python] BinaryGap


質問する

  • 10進数をバイナリに変換すると、0の2つの1の間の最大数
  • を返します.
  • ex.1041(10進数)は10000010001(バイナリ)に変換され、最大ギャップは5
  • 連続1間のギャップは0であり、バイナリ数には1(1000...)しかない.図gapは存在しないため、0
  • に答える

    def solution(N):
        prev, next = -1, -1
        cnt = 0
        binary_gap = 0
        while N > 0:
            r = N % 2
            N = (N - r) / 2
            if r == 1:
                prev = next
                next = cnt
            if prev >= 0 and next > 0 and next - prev - 1 > binary_gap:
                binary_gap = next - prev - 1
            cnt += 1
        return binary_gap