47. Permutations II
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: A list of unique permutations.
*/
vector<vector<int> > permuteUnique(vector<int> &nums) {
// write your code here
vector<vector<int>> res;
vector<int> sub;
vector<bool> visited(nums.size(), 0);
if(nums.empty()){
res.push_back(sub);//!!!!!!!!!
return res;
}
sort(nums.begin(), nums.end());
helper(nums, visited, sub, res);
return res;
}
void helper(vector<int> &nums, vector<bool> &visited,
vector<int> &sub, vector<vector<int>> &res){
if(sub.size() == nums.size()){
res.push_back(sub);
return;
}
for(int i=0; i<nums.size(); i++){
if(!visited[i]){
if(i>0 && visited[i-1] == 0 && nums[i] == nums[i-1]){
continue;
}
sub.push_back(nums[i]);
visited[i] = 1;
helper(nums, visited, sub, res);
sub.pop_back();
visited[i] = 0;
}
}
}
};