题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:
step1、首先求可能出现在第一个位置的所有字符
step2、然后把整个字符串分成两部分,第一部分是第一个字符串,第二部分是后面字符的所有排列情况
记录自己没有通过的测试用例:
1、空
2、a
3、ab
4、aa
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> arraylist = new ArrayList<String>();
if(str.length()==0) return arraylist;
char[] str2= str.toCharArray();
Permutation( str2,arraylist,0);
Collections.sort(arraylist);
return arraylist;
}
public void Permutation(char[] str,ArrayList<String> arraylist,int count){
String s = new String(str);
if(count == str.length-1 && (!arraylist.contains(s))){
arraylist.add(s);
return ;
}
for(int i = count ;i<str.length;i++){
char ch = str[count];
str[count] = str[i];
str[i] = ch;
//换了一次就转向下一个
Permutation(str, arraylist,count+1);
ch = str[count];
str[count] = str[i];
str[i] = ch;
}
}
}
分析:
会有重复,我这里每次添加之前,都先判断是否已经有了
还有就是顺序可能会不对,所以用了一个自带的sort函数