首页 > 其他 > 详细

剑指 Offer 38. 字符串的排列

时间:2021-04-18 22:24:36      阅读:31      评论:0      收藏:0      [点我收藏+]

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

 

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

 

示例:

输入: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. 字符串的排列

原文:https://www.cnblogs.com/pionice/p/14674054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!