# leetcode 47. Permutations II
## Permutation
```cpp
class Solution {
public:
void recur(vector<int> nums, vector<int> ans, vector<vector<int>>& res, int size){
if(!size){
res.push_back(ans);
return;
}
for(int i = 0; i < size; i++){
if(i > 0 && nums[i] == nums[i - 1]) continue;
ans.push_back(nums[i]);
vector<int> temp = nums;
temp.erase(temp.begin() + i);
recur(temp, ans, res, size - 1);
ans.pop_back();
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res;
vector<int> ans;
recur(nums, ans, res, nums.size());
return res;
}
};
```
## swap
```cpp
class Solution {
public:
void recur(vector<int> nums, vector<vector<int>>& res, int j, int size){
if(j == size){
res.push_back(nums);
return;
}
for(int i = j; i < size; i++){
if(i != j && nums[i] == nums[j]) continue;
swap(nums[i], nums[j]);
recur(nums, res, j + 1, size);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res;
recur(nums, res, 0, nums.size());
return res;
}
};
```
###### tags: `leetcode` `c++`