美文网首页
Permutations II

Permutations II

作者: Ukuleler | 来源:发表于2019-10-22 14:17 被阅读0次
    捕获.PNG

    这道题和Permutations类似,不同的是,现在包含了重复的数字,那么思路相同,还是利用dp,只不过首先进行排序,并且遇到重复的就略过比如1,1,2。那么要做的排序就只有1和2,重复的那个1就被略过。代码如下

    public class permuteUnique {
        public static List<List<Integer>> permuteUnique(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> res =permute(nums);
            return res;
        }
    
        public static List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> res =new ArrayList<>();
            if(nums.length==1){
                List<Integer> temp = new ArrayList<>();
                temp.add(nums[0]);
                res.add(temp);
                return res;
            }
            int[] tempNums = new int[nums.length-1];
            int pre=0;
            for(int i=0;i<nums.length;i++){
                if(i>0 && pre==nums[i]){
                    continue;
                }
                pre=nums[i];
                for(int j=0;j<tempNums.length;j++){
                    if(j<i){
                        tempNums[j]=nums[j];
                    }else if(j>=i){
                        tempNums[j]=nums[j+1];
                    }
                }
                List<List<Integer>> templ = permute(tempNums);
                for(int k=0;k<templ.size();k++){
                    List<Integer> l = templ.get(k);
                    l.add(nums[i]);
                    templ.set(k ,l);
                }
                res.addAll(templ);
            }
            return res;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Permutations II

          本文链接:https://www.haomeiwen.com/subject/lueqvctx.html