C++でn回反復した後に取得されたバイナリ文字列でi番目のインデックス文字を検索します
バイナリ文字列ビンがあるとします。次に、それにn回の反復を適用し、各反復で0が01になり、1が10になります。その後、n回目の反復後の文字列のi番目のインデックス文字。したがって、バイナリ文字列が101、n =2、i =3の場合、最初の反復後は100110になり、次の反復では100101101001になるため、i番目のインデックスは1を保持します。
これを解決するには、次の手順に従う必要があります-
- ループをn回実行し、各反復で文字列に対して別のループを実行します
- バイナリ文字列の各文字を変換します。0の場合は01を格納し、1の場合は10を別の一時文字列に格納します。
- 内部ループの完了後、一時文字列をバイナリ文字列に格納します。
- 次に、i番目のインデックスを返します。
例
#include<iostream> using namespace std; char getCharacter(string bin_str, int n, int i) { string temp = ""; for (int x = 0; x < n; x++) { for (int y = 0; y < bin_str.length(); y++) { if (bin_str[y] == '1') temp += "10"; else temp += "01"; } bin_str = temp; temp = ""; } return bin_str[i]; } int main() { int n = 2; string bin = "101"; cout << 3 << "rd character is: "<< getCharacter(bin, n, 3)<<endl; cout << 9 << "th character is: "<< getCharacter(bin, n, 9); }
出力
3rd character is: 1 9th character is: 0
-
C++で二分木の葉を見つける
二分木があるとします。すべての葉を集めて取り除き、木が空になるまで繰り返します。 したがって、入力が次のような場合 その場合、出力は[[4,5,3]、[2]、[1]]になります。 これを解決するには、次の手順に従います- 1つのマップszを定義する 1つの2D配列retを定義する 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、- sz [ノードの値]:=1 + dfs(ノードの左側)とdfs(ノードの右側)の最大値 retのサイズ
-
C ++を使用して、括弧の文字列から等しい点を見つけます。
ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字