背诵。理解布尔数组的意义。
public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> results = new LinkedList<>();
if (nums == null || nums.length == 0) {
return results;
}
Arrays.sort(nums);
List<Integer> list = new LinkedList<Integer>();
boolean[] visited = new boolean[nums.length];
permuteUniqueHelper(results, list, nums, visited);
return results;
}
private void permuteUniqueHelper(List<List<Integer>> results, List<Integer> list, int[] nums, boolean[] visited) {
if (list.size() == nums.length) {
results.add(new LinkedList<>(list));
return;
}
for (int i = 0; i < nums.length; i++) {
if (visited[i] || (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1])) {
continue;
}
visited[i] = true;
list.add(nums[i]);
permuteUniqueHelper(results, list, nums, visited);
list.remove(list.size() - 1);
visited[i] = false;
}
}
}