タイトル説明
文字列の入力は、文字列のすべての順列を出力します。例えば、入力された文字列abc、ABC文字A、B、C、ACB、BAC、BCA、CABとCBAによって注文することができ、すべての文字列を印刷します。
アイデア解析
二つの部分、などの文字列最初の部分の最初の文字の位置の、第二の部分の残りの文字は、次いで、この操作は、文字列を必要とする2つのステップに分けることができる:
需要は、第1の部分で発生することがあり1最初の文字の位置は、それが最初の文字との交換以下のすべての文字で
、元の質問に行きまし配置、の文字の後ろ2.需要。あなたは再帰を使用することができます。
テストケース
- 機能テスト:一つ以上の文字を入力文字列。
- 特別な入力テスト:入力文字列の内容が空またはnullptrポインタです。
Javaコード
public class Offer38 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public ArrayList<String> Permutation(String str) {
return Solution1(str);
}
private static ArrayList<String> Solution1(String str) {
ArrayList<String> list = new ArrayList<String>();
if(str==null || str.length()==0){
return list;
}
permutationCore(str.toCharArray(),0,list);
Collections.sort(list);
return list;
}
private static void permutationCore(char[] array,int index,ArrayList<String> list){
if(index == array.length-1){
if(!list.contains(String.valueOf(array))){
list.add(String.valueOf(array));
}
}else{
for(int i=index;i<array.length;i++){
char tmp = array[index];
array[index] = array[i];
array[i] = tmp;
permutationCore(array,index+1,list);
array[i]=array[index];
array[index] = tmp;
}
}
}
private static void test1() {
}
private static void test2() {
}
private static void test3() {
}
}