标签:
Question:
Given a list of numbers with duplicate number in it. Find all unique permutations.
For numbers [1,2,2] the unique permutations are:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
1 class Solution {
2 /**
3 * @param nums: A list of integers.
4 * @return: A list of unique permutations.
5 */
6 public ArrayList<ArrayList<Integer>> permuteUnique(ArrayList<Integer> nums) {
7 ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
8 ArrayList<Integer> list = new ArrayList<Integer>();
9 if(nums == null || nums.size() == 0) {
10 return result;
11 }
12
13 Collections.sort(nums);
14 boolean[] visited = new boolean[nums.size()];
15 permuteUniqueHelper(result, list, nums, visited);
16 return result;
17 }
18
19 public void permuteUniqueHelper(ArrayList<ArrayList<Integer>> result,
20 ArrayList<Integer> list,
21 ArrayList<Integer> nums,
22 boolean[] visited) {
23 if(list.size() == nums.size()) {
24 result.add(new ArrayList<Integer>(list));
25 }
26
27 for(int i = 0; i < nums.size(); ++i) {
28 if(visited[i] || (i > 0 && nums.get(i) == nums.get(i - 1) && !visited[i - 1]))
29 continue;
30
31 visited[i] = true;
32 list.add(nums.get(i));
33 permuteUniqueHelper(result, list, nums, visited);
34 list.remove(list.size() - 1);
35 visited[i] = false;
36 }
37 }
38 }
标签:
原文地址:http://www.cnblogs.com/billzhou0223/p/5004010.html