# 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++`