Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのバイナリギャップ


正の整数Nがあるとすると、Nのバイナリ表現で2つの連続する1の間の最長距離を見つける必要があります。2つの連続する1がない場合は、0を返します。

したがって、入力が22の場合、バイナリの22は10110であるため、出力は2になります。22のバイナリ表現には3つあり、1の2つの連続するペアがあります。 1の最初の連続するペアの距離は2で、次に1の2番目の連続するペアの距離は1です。回答はこれら2つの距離の最大値である2になります。

これを解決するには、次の手順に従います-

  • K:=Nのバイナリ表現のビットのリストを作成します
  • 最大:=0、C:=0、S:=0
  • フラグ:=False
  • 0からKのサイズの範囲のiの場合、
    • K [i]が「1」でCが0でフラグがFalseの場合、
      • C:=i
      • フラグ:=True
    • それ以外の場合、K [i]が「1」でフラグの場合、
      • S:=i
      • Max
      • 最大:=| 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

    1. Pythonでの二分木の直径

      二分木があるとしましょう。木の直径の長さを計算する必要があります。二分木の直径は、実際には、ツリー内の任意の2つのノード間の最長パスの長さです。このパスは必ずしもルートを通過する必要はありません。したがって、ツリーが以下のようになっている場合、パスの長さ[4,2,1,3]または[5,2,1,3]は3であるため、直径は3になります。 これを解決するには、次の手順に従います- dfsを使用して直径を見つけ、答えを設定します:=0 ルートdfs(root)を使用してdfs関数を呼び出します dfsは以下のdfs(node)のように機能します ノードが存在しない場合は、0を返します 左

    2. Pythonで二分木を反転する

      二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode:    def __init__(self, data, left = None, right = None):