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

有重复项数字的所有排列

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

相关推荐

06-23 17:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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