题解 | #字符串的排列#

字符串的排列

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;
        }
    }
}
全部评论

相关推荐

大摆哥:刚好要做个聊天软件,直接让你帮他干活了
点赞 评论 收藏
分享
05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司10个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务