2021-07-20 字符串的全排列
2021-07-20 本文已影响0人
hlchengzi
回溯算法
1.回溯出口,当找到了一个问题的解时,存储该解。
2.回溯主体,就是遍历当前的状态的所有子节点,并判断下一个状态是否是满足问题条件的,如果满足问题条件,那么进入下一个状态。
3.状态返回,如果当前状态不满足条件,那么返回到前一个状态。
public ArrayList<String> Permutation(String str) {
char[] chars = str.toCharArray();
TreeSet<String> treeSet = new TreeSet<>();
Perm(chars,treeSet,0,str.length());
ArrayList<String> result = new ArrayList<>(treeSet);
return result;
}
public void Perm(char[] str,TreeSet treeSet,int start,int length){
if(start == length-1){
treeSet.add(String.valueOf(str));
return;
}
for (int i = start; i <length ; i++) {
if(i==start || str[i]!= str[start]) {
swap(str, start, i);
Perm(str, treeSet, start + 1, length);
swap(str, start, i);
}
}
}