基于回溯法思想(排列树):
第一次交换:字符串首字母与其他位置字母分别交换,形成多个子树;
再第一次交换基础上,发生第二次交换,第二次交换是字符串第二个字母与其他位置字母交换;
…
直到最后一个字母结束;
public ArrayList<String> Permutation(String str) {
List<String> res = new ArrayList<>();
if(str!=null && str.length()>0){
PermutationHelper(str.toCharArray(), 0, res);
Collections.sort(res);
}
return (ArrayList)res;
}
private void PermutationHelper(char[] cs, int i, List<String> res){
if(i==cs.length-1){
String val = String.valueOf(cs);
if(!res.contains(val)){
res.add(val);
}
}else{
for(int j=i; j<cs.length; j++){
swap(cs, i, j);
PermutationHelper(cs, i+1, res);
swap(cs, i, j);
}
}
}
private void swap(char[] cs, int i, int j){
char temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}