Module: 指定されたマスクのすべてのサブパターンを反復します


Problem

1 /7


指定された長さのバイナリ文字列

Theory Click to read/hide

特定の長さのすべてのビットシーケンスを列挙する必要がある場合があります。言い換えれば、可能なすべてのオプションを反復処理し、各オブジェクトに対して 2 つの可能な状態のいずれかが選択されます。

このような状況では、ビット マスクを使用して列挙を実装することが可能です。このアプローチの利点は、そのようなコードが非再帰的に機能し、コレクションなどではなく数値を操作することで、パフォーマンスが大幅に向上することです。

ビットマスクを使用した一般的なコードを以下に示します。 intn; // oobjects の数 (ビット シーケンスの長さ) for (int mask = 0; mask < (1 << n); mask++) { // 0 から 2^n - 1 までのすべての数値をループし、各数値はビットマスクに対応します // 現在の数値マスクはビットマスクで、i 番目のビットは i 番目のオブジェクトの状態を指定します for (int i = 0; i < n; i++) { // n ビットを繰り返し処理して、各オブジェクトの状態を理解します if ((1 << i) & mask) { // i 番目のビットが 1 に等しいかどうかを確認します // i 番目のオブジェクトが状態 '1' を持つオプションを処理します。 } else { // i 番目のビットがゼロの場合 // 状態 '0' の i 番目のオブジェクトであるオプションを処理します。 } } }
このコードは O(2^n * f(n)) で実行されます。ここで、f(n) は 1 つの特定の iterable を処理するのにかかる時間です。

Problem

数値 N を指定すると、0 と 1 で構成される長さ N のすべての文字列を辞書順に出力します。

問題を解決するには、すべてのサブパターンの列挙を使用してください

入力

単数 N が与えられます. (自然, 1 ≤ N ≤ 10)

出力

0 と 1 で構成される長さ N のすべての文字列を辞書順に、1 行に 1 つずつ出力する必要があります

<本体>
 
入力 出力
<プレ> 2 <プレ> 00 01 10 11