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;
}
}