和046意思差不多,区别在于这里不允许重复的序列。因为给的序列可能是有重复的数字。
用的是046的代码,区别的修改在代码中。
class Solution {
public:
vector<vector<int>>ff;
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<int>gg;
sort(nums.begin(),nums.end());//先将序列排序
find_ans(0,0,gg,nums);
return ff;
}
void find_ans(int step,int mark,vector<int>gg,vector<int>& nums){
if(step+1>nums.size()){
ff.push_back(gg);
return ;
}
for(int ii=0;ii<nums.size();ii++){
int text=ii;
if((mark>>ii)&1)continue;
if(step+1<=gg.size()&&gg[step]==nums[ii])continue;//判断是不是和前一个但是在同一个step上选择的是一样的。
if(step+1>gg.size())gg.push_back(nums[ii]);
else gg[step]=nums[ii];
//mark+=(1<<ii);
find_ans(step+1,mark+(1<<ii),gg,nums);
}
}
};