其他分享
首页 > 其他分享> > 剑指offer_27:字符串的排列

剑指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;
    }
}

标签:index,27,String,offer,int,res,charArray,字符串,new
来源: https://www.cnblogs.com/xyz-1024/p/14309617.html