Javaはabc文字列配列の組み合わせを実現します。
1.重複して並べられます。abcの3つの文字列の長さは全部3の文字列で、aaa、aab、aac…ccは全部で27種類あります。
再帰的な思想を利用して、最初の文字はabcの中から一つ、三つの選択を選択して、その後問題がabcの長さが2の文字になる場合、再帰後にすべての可能性を求めることができる。循環終了条件を制御すればいいです。
再帰的に処理することができ、文字の長さが分からない場合は、汎用処理となります。長さが分かれば、多層サイクルだけを利用しても結論が出ます。
2.全配列:それともabcの3文字ですか?全配列とは文字が重複しないことです。最後の3*2=6つの結果
1の方法を利用してもいいです。3つの文字が等しいかどうかを判断すると、等しくないのが必要な全配列の一つです。このような時間の複雑さはn^nで、全配列の種類はnです。だから1種のnを設計しなければなりません!のアルゴリズムです。
再帰を利用してもいいです。最初の文字列は全部でn種類の選択があります。残りはn-1規模の再帰問題になります。最初の文字のn種の選択は、すべて文字列の中のものです。したがって、最初の文字を使って1−nの位置と交換し、nの場合を得て、n−1の規模を再帰的に処理することができますが、処理が終わったら元の文字に戻る必要があります。
3.組み合わせ:abc 3文字のすべての組み合わせ
すべての組み合わせ、つまりabcの各ビットが選択されているかどうかの問題を求めて、第1位の2の可能性、第2位の2種類。ですから、全部で2^n種類があります。0では取らない、1では選択を表し、このように110という形でabを表すことができる。abcの全部の表示形式は0から2^3-1までです。そしてビットと演算を押して、結果が1なら現在のビットを出力します。結果は0は出力されません。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
再帰的な思想を利用して、最初の文字はabcの中から一つ、三つの選択を選択して、その後問題がabcの長さが2の文字になる場合、再帰後にすべての可能性を求めることができる。循環終了条件を制御すればいいです。
再帰的に処理することができ、文字の長さが分からない場合は、汎用処理となります。長さが分かれば、多層サイクルだけを利用しても結論が出ます。
public class Permutation {
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();
return;
}
for(int i=0; i<chs.length; i++){
buf[len] = chs[i];
per(buf, chs, len-1);
}
}
}
繰り返し選択できます。全部で27種類の場合、結果は下図のようになります。2.全配列:それともabcの3文字ですか?全配列とは文字が重複しないことです。最後の3*2=6つの結果
1の方法を利用してもいいです。3つの文字が等しいかどうかを判断すると、等しくないのが必要な全配列の一つです。このような時間の複雑さはn^nで、全配列の種類はnです。だから1種のnを設計しなければなりません!のアルゴリズムです。
再帰を利用してもいいです。最初の文字列は全部でn種類の選択があります。残りはn-1規模の再帰問題になります。最初の文字のn種の選択は、すべて文字列の中のものです。したがって、最初の文字を使って1−nの位置と交換し、nの場合を得て、n−1の規模を再帰的に処理することができますが、処理が終わったら元の文字に戻る必要があります。
public class Arrange {
public static void main(String[] args) {
char[] chs = {'a','b','c'};
arrange(chs, 0, chs.length);
}
public static void arrange(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();
return;
}
for(int i=start; i<len; i++){
char temp = chs[start];
chs[start] = chs[i];
chs[i] = temp;
arrange(chs, start+1, len);
temp = chs[start];
chs[start] = chs[i];
chs[i] = temp;
}
}
}
運転結果は下図のように、全部で6つの組み合わせです。3.組み合わせ:abc 3文字のすべての組み合わせ
すべての組み合わせ、つまりabcの各ビットが選択されているかどうかの問題を求めて、第1位の2の可能性、第2位の2種類。ですから、全部で2^n種類があります。0では取らない、1では選択を表し、このように110という形でabを表すことができる。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 1
System.out.print(chs[j]);
}
}
System.out.println();
}
}
}
出力結果は以下の通りです。第一行為は空で、一つも取らないという意味です。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。