タイトル:文字列内のすべての文字を印刷するように配置された文字列を入力します。
例えば、入力文字列abcのために、Bによって印刷された文字は、Cはすべての文字列の外に配置することができる:ABC、ABC、BAC、BCA、CAB、CBA
私たちは、文字列全体の構成は、二つのステップとして見ることができ求める。まず、第一の位置にあるすべての可能な文字、最初の文字以降の交換で、すなわち、すべての文字を決定します。次の文字のすべてを手配求めて最初の文字を固定する第2のステップと、。文字の後の最初の文字、および文字の後のすべての文字:この時間は、我々はまだ戻って2つの部分にすべての文字を入れました。そして、一つ一つが、最初の文字と文字がそれに続く......為替
public void swap(char[] arr,int idx1,int idx2){
char temp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = temp;
}
public void permutation(char[] arr,int index,int size){
if(index == size){
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+ "");
}
System.out.println();
}
else{
for(int i = index;i<size;i++){
swap(arr,i,index); //我们从index向后扫描每一个字符(即指针i指向的字符),交换index和i指向的字符
permutation(arr,index+1,size); //对index后面的字符数组递归地做排列操作
swap(arr,i,index); //每次递归固定要排列字符数组第一个字符不变
}
}
}