1.繰り返しの配置:ABCには3文字と長さ3のすべての文字列があり、AAA、AAB、AAC ...... CCCには合計27種類あります
再帰のアイデアを使用して、最初のキャラクターはABCと3つの選択肢から選択できます。次に、問題は、ABCが長さ2の文字で構成されている場合に変換されます。ループ再帰の後、すべての可能性を見つけることができます。ループ出口条件を制御するだけです。
再帰はそれを処理するために使用でき、文字の長さがわからない場合、それは一般的な処理です。長さを知っている場合、結論を引き出すために複数の層のループを使用するだけです。
public class permution {public static void main(string [] args){char [] chs = {'a'、 'b'、 'c'}; Per(new char [3]、chs、3-1); } public static void per(char [] buf、char [] chs、int len){if(len == -1){for(int i = buf.length -1; i> = 0; -i)system.out.print(buf [i]); System.out.println();戻る; } for(int i = 0; i <chs.length; i ++){buf [len] = chs [i]; Per(buf、chs、len-1); }}}繰り返し可能な選択、合計27の状況、結果を下の図に示します
2。フルアレンジメント:それでも3人のキャラクターABC、フルアレンジメントは、キャラクターを繰り返すことができないことを意味します。最後の3*2 = 6の結果
メソッドを1で使用できます。3つのキャラクターが等しいかどうかを判断する限り、等しくない完全なアレンジメントが必要なものです。このような時間の複雑さはn^nであり、完全な配置のタイプはnです!したがって、一種のnを設計する必要があります!アルゴリズム。
再帰を使用することもできます。最初の文字列にはnの選択肢があり、残りはn-1スケールの再帰問題になります。最初の文字のnの選択はすべて文字列にあります。したがって、最初の文字を使用して、1-Nの位置と交換してnの状況を取得し、n-1のスケールを再帰的に処理できます。ただし、処理後、交換して元のキャラクターになる必要があります。
public class Arrange {public static void main(string [] args){char [] chs = {'a'、 'b'、 'c'};アレンジ(Chs、0、chs.length); } public static void array(char [] chs、int start、int len){if(start == len-1){for(int i = 0; i <chs.length; ++ i)system.out.print(chs [i]); System.out.println();戻る; } for(int i = start; i <len; i ++){char temp = chs [start]; chs [start] = chs [i]; chs [i] = temp;アレンジメント(CHS、START+1、LEN); temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; }}}操作の結果は、下の図に示されており、合計6つの組み合わせがあります
3。組み合わせ:3文字ABCのすべての組み合わせ
すべての組み合わせを見つけます。つまり、ABCの各ビットが選択されているかどうか、最初のビットは2、2番目のビットは2です。 。したがって、合計2つのタイプがあります。 0は、1つの意味があることを意味し、ABを110で表すことができます。ABCの合計表現は0から2^3-1です。次に、ビットワイズ操作、結果が1の場合、現在のビットが出力され、結果0は出力されません。
public class comb {public static void main(string [] args){char [] chs = {'a'、 'b'、 'c'}; comb(chs); } public static void comb(char [] chs){int len = chs.length; int nbits = 1 << len; for(int i = 0; i <nbits; ++ i){int t; for(int j = 0; j <len; j ++){t = 1 << j; if((t&i)!= 0){//操作と同じが1 System.out.print(chs [j]); }} system.out.println(); }}}出力の結果は次のとおりです。最初の動作は空です。つまり、誰も取られないことを意味します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。