剑指 Offer 38. 字符串的排列

2021/4/18 18:25:27

本文主要是介绍剑指 Offer 38. 字符串的排列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

输入一个字符串,打印出该字符串中字符的所有排列。

 

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

 

示例:

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

 

class Solution {
    List<String>ans = new LinkedList<>();
    char[] c;
    public String[] permutation(String s) {
        c = s.toCharArray();
        dfs(0);
        return ans.toArray(new String[ans.size()]);
    }
    
    public void dfs(int x)
    {
        //base case
        if(x == c.length-1)
        {
            ans.add(String.valueOf(c));
            return;
        }
        HashSet<Character> set = new  HashSet<>();
        //枚举交换产生所有情况
        for(int i = x;i<c.length;i++)
        {
            if(set.contains(c[i]))
                continue;//重复情况进行剪枝
            set.add(c[i]);
            swap(i,x);
            dfs(x+1);
            swap(i,x);//回溯
        }
    }
    
    public void swap(int i,int j)
    {
        char temp = c[i];
        c[i] = c[j];
        c[j] = temp;
    }
}

 



这篇关于剑指 Offer 38. 字符串的排列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程