速度とメモリを気にしない場合は、再帰をコールド使用します。これにより、小さくて短い解決策が得られます。
public static void print01PermutationsUpToLength(final String currentString, final int upTo) {
if (upTo == 0) {
System.out.println(currentString);
return;
}
print01PermutationsUpToLength(currentString + "0", upTo - 1);
print01PermutationsUpToLength(currentString + "1", upTo - 1);
}
(java。明らかに、これは再帰と値による呼び出しまたは文字列のコピーを許可するすべての言語で実行できます)
引数が気に入らない場合はString
、start関数を追加できます。
public static void print01PermutationsUpToLength(final int upTo) {
print01PermutationsUpToLength("", upTo);
}
結果:
final int upToLength = 3;
print01PermutationsUpToLength(upToLength);
000
001
010
011
100
101
110
111
フォーマットは必要に応じて変更できます。これは、結果をよりよく表示するためだけのものです。
文字列構造のパーツを切り替えると、順序を変更できます(currentString + "0"
)。