码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-04-26 13:15:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:tin   list   重复   判断   相同   ==   搜索   数字   continue   

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

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(含重复数字的全排列)

标签:tin   list   重复   判断   相同   ==   搜索   数字   continue   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!