首页 > 其他 > 详细

47. 全排列 II(含重复数字的全排列)

时间:2021-04-24 22:26:14      阅读:29      评论:0      收藏:0      [点我收藏+]

与不含重复数字的全排列相比,在于:
排序;
添加对上一数字的判断

class Solution {
    LinkedList<List<Integer>> ans=new LinkedList<>();
    LinkedList<Integer> path=new LinkedList<>();
    boolean[] used;
    public List<List<Integer>> permuteUnique(int[] nums) {
      used=new boolean[nums.length];
      Arrays.sort(nums);//全排列去重,这是关键
      dfs(nums,0);
      return ans;

    }
    void dfs(int[] nums,int cnt){
        if(cnt==nums.length){
            ans.add(new LinkedList(path));
            return;
        }

        for(int i=0;i<nums.length;i++){
            if(i>0&&nums[i]==nums[i-1]&&!used[i-1])//上一个数字和本数字相同,且上一个数字没有被访问。
            //那么本次的搜索一定是是重复的
                 continue;
            if(!used[i]){
                used[i]=true;
                path.add(nums[i]);
                dfs(nums,cnt+1);
                used[i]=false;
                path.removeLast();
            }
        }

    }
}

47. 全排列 II(含重复数字的全排列)

原文:https://www.cnblogs.com/wsshub/p/14697823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!