要約:
主にアルゴリズムの完全な配列に
この手順を実行するにはターン数の各アレイの内部:最初の場所の値が、残りの全アレイのそれぞれの数を作ります。for(int j=i;j<arr.length;j++)
選択ソートアルゴリズムでソート文字列を達成するための辞書()(独自のコードを直接Collections.sortを書き込むことはできません)
compareTo()メソッドを使用して文字列辞書サイズ比較
件名の説明:
文字列の入力は、辞書式順序で文字列の文字のすべての順列を出力します。例えば、入力文字列abcの場合は、ABCのすべての文字列、B、Cが出て配置することができ、ACB、BAC、BCA、CABおよびCBAを印刷します。
説明を入力します。
より9(おそらく繰り返し文字)以下の文字列を入力し、文字は小文字のみが含まれます。
import java.util.ArrayList;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result =new ArrayList<String>();
if(str==null) return result;
char [] cha = str.toCharArray();
PermutationCount(cha,0,result);
Sort(result); //按照字典顺序给字符串排序
return result;
}
public static void PermutationCount(char [] arr ,int i,ArrayList<String> list){
if(i==arr.length-1){ //递归结束条件,当指向最后一位数时,将字符串添加到ArrayList
String item = String.valueOf(arr);
if(!list.contains(item))
list.add(item);
}
else{
for(int j=i;j<arr.length;j++){ //每次递归执行完后不是回到上一层,而是执行循环直到循环结束才返回上一层!!!。
swap(arr,i,j); //将每一个数都和第0位的数交换,其余的数执行下面的代码
PermutationCount(arr,i+1,list); //剩余的数递归执行全排列
swap(arr,i,j); //这个数和第0位的数交换后还要还原回去
}
}
}
public static void swap(char [] arr,int i,int j){ //交换数组元素
char temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void Sort(ArrayList<String> res){ //选择排序把ArrayList里的字符串按字典顺序排序
for(int i=0;i<res.size()-1;i++){
int temp=i;
int j;
for(j=i+1;j<res.size();j++){
if(res.get(j).compareTo(res.get(temp))<0)//字符串的按字典顺序比较大小
temp=j;
}
String str=res.get(temp);
res.set(temp,res.get(i));
res.set(i,str);
}
}
}