题目链接
法一
private void backTracking(List<List<Integer>> ans, List<Integer> path, int[] nums, boolean used[]) {
if (path.size() == nums.length) {
ans.add(new LinkedList<>(path));
return;
}
for (int i = 0; i < nums.length; i++) {
if (used[i]) {
continue;
}
if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) {
continue;
}
used[i] = true;
path.add(nums[i]);
backTracking(ans, path, nums, used);
path.remove(path.size() - 1);
used[i] = false;
}
}
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> ans = new LinkedList<>();
List<Integer> path = new LinkedList<>();
boolean used[] = new boolean[nums.length];
Arrays.sort(nums);
backTracking(ans, path, nums, used);
return ans;
}
本地测试
lay.showTitle(47);
int[] nums47 = new int[]{1,1,2};
Solution47 sol47 = new Solution47();
List<List<Integer>> ans47 = sol47.permuteUnique(nums47);
arrayOpt.showIntLists(ans47);