剑指offer_27:字符串的排列

输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]

限制:
1 <= s 的长度 <= 8

1、回溯

class Solution {
    char[] charArray;
    List<String> res=new ArrayList<>();
    public String[] permutation(String s) {
        int len=s.length();
        charArray=s.toCharArray();
        Arrays.sort(charArray);
        dfs(0);
        return res.toArray(new String[res.size()]);
    }
    public void dfs(int index){
        if(index==charArray.length-1){
            res.add(String.valueOf(charArray));
            return;
        }
        HashSet<Character> set=new HashSet<>();
        for(int i=index;i<charArray.length;i++){
            if(set.contains(charArray[i])){
                continue;
            }
            set.add(charArray[i]);
            swap(i,index);
            dfs(index+1);
            swap(i,index);
        }
    }
    public void swap(int a,int b){
        char temp=charArray[a];
        charArray[a]=charArray[b];
        charArray[b]=temp;
    }
}
posted @ 2021-01-21 18:27  小昊子丫  阅读(39)  评论(0编辑  收藏  举报