重复全排列

题目描述:给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:输入: [1,1,2]

输出:

[

  [1,1,2],

  [1,2,1],

  [2,1,1]

]

Java代码

class Solution {

    private List> res = new ArrayList<>();

    private boolean[] used;


    private void findPermuteUnique(int[] nums,int depth,Stack stack) {

        if(depth == nums.length) {

            res.add(new ArrayList<>(stack));

            return;

        }

        for(int i=0;i

            if(!used[i]) {

                if(i>0 && nums[i]==nums[i-1] && !used[i-1]) {

                    continue;

                }

                used[i] = true;

                stack.add(nums[i]);

                findPermuteUnique(nums,depth+1,stack);

                stack.pop();

                used[i] = false;

            }

        }

    }

    public List> permuteUnique(int[] nums) {

        int len = nums.length;

        if(len == 0) {

            return res;

        }

        Arrays.sort(nums);

        used = new boolean[len];

        findPermuteUnique(nums,0,new Stack<>());

        return res;

    }

}

你可能感兴趣的:(重复全排列)