题解 | #有重复项数字的所有排列#

有重复项数字的所有排列

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


public class Solution {
    ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
        //排序
        Arrays.sort(num);
        boolean[] mark = new boolean[num.length];
        LinkedList<Integer> track = new LinkedList<>();
        backTrack(num,mark,track);
        return result;
    }
 
    public void backTrack(int[] num, boolean[] mark, LinkedList<Integer> track) {
        if(track.size() == num.length){
            result.add(new ArrayList<Integer>(track));
            return;
        }
        for(int i=0;i<num.length;i++){
            //该数已经标记过,遍历下一个数
            if(mark[i]){
                continue;
            }
 
            //之前重复色数据没有被使用
            if(i>0 && num[i] == num[i-1] && !mark[i-1]){
                continue;
            }
 
            //符合条件的数据添加进来
            mark[i] = true;
            track.add(num[i]);
 
            //递归调用
            backTrack(num,mark,track);
            //回溯
            track.removeLast();
            mark[i] = false;
        }
 
    }
}
全部评论
这个 //之前重复数据没有被使用 怎么理解呢
点赞 回复 分享
发布于 2022-04-20 11:56

相关推荐

牛客840099999号:没见过这样的大厂,至少头部的肯定没有
点赞 评论 收藏
分享
03-07 13:32
门头沟学院 C++
未来可欺a:读研吧,这简历只适合学历高的,本科大概率只能干开发,你这个简历开发不匹配,算法和深度学习的话学历又不够
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务