public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> ret = new ArrayList<>();
List<Integer> curr = new ArrayList<>();
boolean[] isVisited = new boolean[nums.length];
dfs(0, nums, curr, ret, isVisited);
return ret;
}
private static void dfs(int pos, int[] nums, List<Integer> curr, List<List<Integer>> ret, boolean[] isVisited) {
if (curr.size() == nums.length) {
ret.add(new ArrayList<>(curr));
}
for (int i=0; i<nums.length; i++) {
// simialr with duplicate combinations
if (isVisited[i] || (i!=0 && nums[i]==nums[i-1] && !isVisited[i-1])) {
continue;
}
isVisited[i] = true;
curr.add(nums[i]);
dfs(i+1, nums, curr, ret, isVisited);
isVisited[i] = false;
curr.remove(curr.size()-1);
}
}
}
Leetcode 47. Permutations II
最新推荐文章于 2019-09-19 16:04:00 发布