题解 | #字符串的排列#

字符串的排列

http://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

import java.util.*;
public class Solution {
    final int N = 10;
    ArrayList<String> res = new ArrayList<>();
    char[] chs;//储存字符串中的字符数组
    int step;//深搜树的最大深度,也就是递归终止步数
    int[] path = new int[N];
    boolean[] isVisited = new boolean[N];

    void dfs(int u) {
        if (u == step) {
            StringBuilder sbu = new StringBuilder();
            for (int i = 1; i <= step; i++) {
                sbu.append(chs[path[i] - 1]);
            }
            String s = sbu.toString();
            if (!res.contains(s)) {
                res.add(s);
            }
        }
        for (int i = 1; i <= step; i++) {
            if (!isVisited[i]) {
                isVisited[i] = true;
                path[u + 1] = i;
                dfs(u + 1);
                isVisited[i] = false;
            }
        }
    }

    public ArrayList<String> Permutation(String str) {
        chs = str.toCharArray();
        Arrays.sort(chs);//排序
        step = chs.length;
        dfs(0);//获取全排列,并根据全排列添加字符
        return res;
    }
}
全部评论

相关推荐

zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务