Question
Tips
Still the backtracking
Source Code
class Solution {
public:
void BT(int d,vector<int> &nums){
if(d==nums.size()){
vector<int> t;
for(int i=0;i<tmp.size();++i)
t.push_back(nums[tmp[i]]);
res.push_back(t);
return;
}
int rec=nums[nums.size()-1]+1; //rec is not in nums
for(int i=0;i<nums.size();++i){
bool flag=true; //flag that means nums[i] is int tmp or not
for(int j=0;j<d;++j)
if(i==tmp[j]){
flag=false;
break;
}
if(flag==false || rec==nums[i])
continue;
rec=nums[i]; //Record the number now , duplicate the next same number
tmp.push_back(i);
BT(d+1,nums);
tmp.erase(tmp.end()-1,tmp.end());
}
}
vector<vector<int> > permuteUnique(vector<int>& nums) {
tmp.clear();
res.clear();
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();++i){
if(i>0 && nums[i]==nums[i-1])
continue;
tmp.push_back(i);
BT(1,nums);
tmp.erase(tmp.end()-1,tmp.end());
}
return res;
}
private:
vector<int> tmp;
vector<vector<int> > res;
};