全排列II——leetcode47(DFS)
全排列II
题目:全排列 II
给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
示例:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
题解:DFS
class Solution {
public void dfs(int[] nums, List<List<Integer>> results, List<Integer> p, int[] book) {
if(p.size()==nums.length) {
results.add(new ArrayList<>(p));
return;
}
for(int i=0;i<nums.length; i++) {
if(book[i]==1 || ((i>0 && nums[i]==nums[i-1] && book[i-1]==0))) {
continue;
}
book[i]=1;
p.add(nums[i]);
dfs(nums, results, p, book);
p.remove(p.size()-1);
book[i]=0;
}
}
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> results=new ArrayList<>();
int[] book=new int[nums.length];
dfs(nums, results, new ArrayList<>(), book);
return results;
}
}