Description

Submission
After sorting the nums, we only need to make sure that the same value is not used in the same place and the same recursion twice.
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res;
vector<bool> taken(nums.size(), false);
vector<int> hand;
backtrack(res, nums, taken, hand, nums.size());
return res;
}
private:
void backtrack(vector<vector<int>>& res, vector<int>& nums,
vector<bool>& taken, vector<int>& hand, int k) {
if(k == 0) {
res.push_back(hand);
return;
}
int prev_pick = 999999;
for(int i = 0; i < nums.size(); ++i) {
if(!taken[i] && prev_pick != nums[i]) {
prev_pick = nums[i];
} else {
continue;
}
hand.push_back(prev_pick);
taken[i] = true;
backtrack(res, nums, taken, hand, k - 1);
hand.pop_back();
taken[i] = false;
}
}
};
