题解 | #字符串的排列#

字符串的排列

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

思路:

普通的全排列操作加一个去重操作即可。

import java.util.*;


public class Solution {
    ArrayList<String> res = new ArrayList<>();  // 结果
    ArrayList<Character> path = new ArrayList<>();  // 单次结果收集
    Set<String> set = new HashSet<>();  // 去重
    boolean[] used;

    public ArrayList<String> Permutation(String str) {
        char[] chars = str.toCharArray();
        used = new boolean[chars.length];
        backTrack(chars);
        res.addAll(set);
        return res;
    }

    public void backTrack(char[] chars) {
        // 终止条件
        if (path.size() == chars.length) {
            StringBuilder sb = new StringBuilder();
            for (Character character : path) {
                sb.append(character);
            }
            set.add(sb.toString());
            return;
        }
        // 遍历其他元素
        for (int i = 0; i < chars.length; i++) {
            // 判断该元素是否已经使用过
            if (used[i]) {
                continue;
            }
            path.add(chars[i]);
            used[i] = true;
            backTrack(chars);
            path.remove(path.size() - 1);
            used[i] = false;
        }
    }
}
全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务