原题:
解决方法:
代码:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2]
have the following unique permutations:
[ [1,1,2], [1,2,1], [2,1,1] ]
解决方法:
由于重复数的存在,我们需要对算法进行几处改动:
- 首先对数组进行排序。
- 循环时,过滤掉重复的数。
- 数组不能再使用引用传递,直接值传递即可。
代码:
void dfs(vector<vector<int>>& res, vector<int> nums, int index){
if (index >= nums.size()){
res.push_back(nums);
return;
}
for(int i = index; i < nums.size(); i++){
if (i != index && nums[i] == nums[index])
continue;
swap(nums[i], nums[index]);
dfs(res, nums, index + 1);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(), nums.end());
dfs(res, nums, 0);
return res;
}