Given a list of numbers with duplicate number in it. Find all unique permutations.
Example
For numbers [1,2,2] the unique permutations are:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
public ArrayList<ArrayList<Integer>> permuteUnique(ArrayList<Integer> nums) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if (nums == null || nums.size() == 0) {
return result;
}
Collections.sort(nums);
ArrayList<Integer> path = new ArrayList<Integer>();
Boolean[] visit = new Boolean[nums.size()];
for (int i = 0; i < nums.size(); i++) {
visit[i] = false;
}
dfs(result, path, nums, visit);
return result;
}
private void dfs(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> path,
ArrayList<Integer> nums, Boolean[] visit) {
if (path.size() == nums.size()) {
result.add(new ArrayList<Integer>(path));
return;
}
for (int i = 0; i < nums.size(); i++) {
if (visit[i] || (i > 0 && visit[i - 1] && nums.get(i - 1) == nums.get(i))) {
continue;
}
visit[i] = true;
path.add(nums.get(i));
dfs(result, path, nums,visit);
path.remove(path.size() - 1);
visit[i] = false;
}
}
思路:
1,2[1],2[2],2[3],3
1,2[1],2[2]
1,2[1],2[2] (visit[i],防止重复访问)
1,2[1],2[3]