Permutations II

捕获.PNG

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

public class permuteUnique {
    public static List> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        List> res =permute(nums);
        return res;
    }

    public static List> permute(int[] nums) {
        List> res =new ArrayList<>();
        if(nums.length==1){
            List 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;i0 && pre==nums[i]){
                continue;
            }
            pre=nums[i];
            for(int j=0;j=i){
                    tempNums[j]=nums[j+1];
                }
            }
            List> templ = permute(tempNums);
            for(int k=0;k l = templ.get(k);
                l.add(nums[i]);
                templ.set(k ,l);
            }
            res.addAll(templ);
        }
        return res;
    }
}

你可能感兴趣的:(Permutations II)