Pythonで2つの数値のLからRの範囲のビットが互いに補完的であるかどうかを確認します
xとyの2つの数値と、指定された範囲(左、右)があるとします。与えられた両方の数値の左から右の範囲のすべてのビットが互いに補完的であるかどうかを確認する必要があります。右から左に向かって、最下位ビットが最初の位置にあると見なされることに注意する必要があります。
したがって、入力がx =41 y =54 left =2 right =5の場合、41と54のバイナリ表現は101001と110110であるため、出力はTrueになります。xとyの範囲2〜5のビット互いに補完し合う「1001」と「0110」です。
これを解決するには、次の手順に従います-
- temp:=x XOR y
- tempの範囲(左、右)のすべてのビットが1の場合はtrueを返し、それ以外の場合はfalseを返します
理解を深めるために、次の実装を見てみましょう-
例
def are_all_setbits_in_range(n, left, right): val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1) new_value = n & val if val == new_value: return True return False def solve(x, y, left, right): temp = x ^ y return are_all_setbits_in_range(temp, left, right) x = 41 y = 54 left = 2 right = 5 print(solve(x, y, left, right))
入力
41, 54, 2, 5
出力
True
-
Pythonで葉のシーケンスが2つの葉と同じであるかどうかを確認するプログラム
2つの二分木があるとします。両方の木の左から右への葉の順序が同じであるかどうかを確認する必要があります。 したがって、入力が次のような場合 両方のツリーのシーケンスが[2、6]であるため、出力はTrueになります。 これを解決するには、次の手順に従います。 c:=新しいリスト 関数inorder()を定義します。これが定着し、c cがnullの場合、 c:=新しいリスト rootがnullでない場合、 順序(ルートの左側、c) ルートの左側がnullで、ルートの右側がnullの場合、 cの最後にrootの値を挿入 順序(ルートの権利、c) return c
-
Pythonで1つのツリーが他のツリーのサブツリーであるかどうかを確認するプログラム
2つの二分木があるとします。 2番目のツリーが最初のツリーのサブツリーであるかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります。 これを解決するには、次の手順に従います- 関数solve()を定義します。これはルート、ターゲットになります ルートがnullで、ターゲットもnullの場合、 Trueを返す ルートがnullまたはターゲットがnullの場合、 Falseを返す ルートの値がターゲットの値と同じである場合、 戻り値solve(ルートの左、ターゲットの左)とsolve(ル