Permuation II lc 47

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example, [1,1,2] have the following unique permutations:

[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]
    public ArrayList<ArrayList<Integer>> permuteUnique(ArrayList<Integer> nums) {
        // write your code here
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if(nums == null || nums.size() == 0 ){

            return result;
        }
        Collections.sort(nums);
        ArrayList<Integer> list = new  ArrayList<Integer>();
        int[] visited = new int[nums.size()];
        helper(result, list, nums,visited);

        return result;

    }

    public void helper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list, ArrayList<Integer> nums, int[] visited ){
        if(list.size() == nums.size()){

            result.add(new ArrayList<Integer>(list));
            return;

        }

        for(int i = 0;i< nums.size(); i ++ ){
            if(visited[i] == 1 || (i!= 0 && visited[i - 1] == 0 && nums.get(i) == nums.get(i-1))){
                continue;
            }
            visited[i] = 1;
            list.add(nums.get(i));
            helper(result,list,nums,visited);
            list.remove(list.size() - 1);
            visited[i] = 0;

        }

    }

results matching ""

    No results matching ""