Python 中的二進位制間隙


假設我們有一個正整數 N,我們需要在 N 的二進位制表示中找出兩個連續 1 之間的最長距離。如果不存在兩個連續的 1,則返回 0。

因此,如果輸入類似於 22,則輸出將為 2,因為 22 的二進位制形式是 10110。在 22 的二進位制表示中,有三個 1 和兩個連續的 1 對。第一個連續的 1 對的距離為 2,第二個連續的 1 對的距離為 1。答案將是這兩個距離中的較大值,即 2。

要解決此問題,我們將遵循以下步驟 -

  • K := 列出 N 的二進位制表示位
  • Max := 0,C := 0,S := 0
  • Flag := False
  • i 從 0 到 K 的大小範圍, do
    • 如果 K[i] 等於 '1',且 C 等於 0,且 Flag 等於 False,則
      • C:= i
      • Flag := True
    • 否則當 K[i] 等於 '1' 且 Flag 為 true 時,則
      • S:= i
      • 如果 Max<abs(S-C),則
        • Max := |S-C|
      • C:= S
  • 返回 Max

讓我們看看以下實現以獲得更好的理解 -

示例

 現場演示

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

更新於:04-Jul-2020

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始吧
廣告
© . All rights reserved.