|
1 | 1 | class Solution {
|
2 | 2 | public List<List<Integer>> permuteUnique(int[] nums) {
|
3 |
| - List<List<Integer>> ans = new ArrayList<>(); |
4 |
| - if (nums.length == 0) { |
5 |
| - return ans; |
6 |
| - } |
7 |
| - List<Integer> curr = new ArrayList<>(); |
| 3 | + List<List<Integer>> result = new ArrayList<>(); |
8 | 4 | Arrays.sort(nums);
|
9 |
| - helper(nums, ans, curr, new boolean[nums.length]); |
10 |
| - return ans; |
| 5 | + helper(nums, result, new ArrayList<>(), new boolean[nums.length]); |
| 6 | + return result; |
11 | 7 | }
|
12 |
| - |
13 |
| - private void helper(int[] nums, List<List<Integer>> ans, List<Integer> curr, boolean[] used) { |
| 8 | + |
| 9 | + private void helper(int[] nums, List<List<Integer>> result, List<Integer> curr, boolean[] visited) { |
14 | 10 | if (curr.size() == nums.length) {
|
15 |
| - ans.add(new ArrayList<>(curr)); |
| 11 | + result.add(new ArrayList<>(curr)); |
| 12 | + return; |
16 | 13 | }
|
17 |
| - else { |
18 |
| - for (int i = 0; i < nums.length; i++) { |
19 |
| - if (used[i]) { |
20 |
| - continue; |
21 |
| - } |
22 |
| - if (i > 0 && nums[i - 1] == nums[i] && !used[i - 1]) { |
23 |
| - continue; |
24 |
| - } |
25 |
| - used[i] = true; |
26 |
| - curr.add(nums[i]); |
27 |
| - helper(nums, ans, curr, used); |
28 |
| - curr.remove(curr.size() - 1); |
29 |
| - used[i] = false; |
| 14 | + for (int i = 0; i < nums.length; i++) { |
| 15 | + if (visited[i] || (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1])) { |
| 16 | + continue; |
30 | 17 | }
|
| 18 | + curr.add(nums[i]); |
| 19 | + visited[i] = true; |
| 20 | + helper(nums, result, curr, visited); |
| 21 | + curr.remove(curr.size() - 1); |
| 22 | + visited[i] = false; |
31 | 23 | }
|
32 | 24 | }
|
33 | 25 | }
|
34 |
| - |
0 commit comments