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);
                }
            }
        }
上一篇 下一篇

猜你喜欢

热点阅读