- 题目
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
- 示例
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- 代码
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> cur = new ArrayList<>();
boolean[] visited;
public void dfs(int[] nums) {
int n = nums.length;
if (cur.size() == n) {
res.add(new ArrayList<>(cur));
return;
}
for (int i = 0; i < n; i++) {
if (visited[i]) {
continue;
}
if (i != 0 && nums[i-1] == nums[i] && visited[i-1]) {
continue;
}
cur.add(nums[i]);
visited[i] = true;
dfs(nums);
cur.remove(cur.size() - 1);
visited[i] =false;
}
}
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
visited = new boolean[nums.length];
dfs(nums);
return res;
}
}