一、题目

二、代码
class Solution
{
public:
vector<vector<int>> return_vector;
vector<int> path;
vector<int>::iterator it;
void back_track(int start_point,vector<int> left,vector<int> right, int max_size)
{
int i,j;
vector<int> com_nums;
if(path.size()==max_size) return_vector.push_back(path);
if(path.size()>max_size) return;
// std::cout<<"start_point "<<start_point<<std::endl;
com_nums.clear(); //拼接
for(i=0;i<left.size();i++) com_nums.push_back(left[i]);
for(i=0;i<right.size();i++) com_nums.push_back(right[i]);
for(i=start_point;i<com_nums.size();i++)
{
if(i!=start_point&&com_nums[i]==com_nums[i-1]) continue; //横向去重
for(j=0,it=com_nums.begin();j<i;j++,it++);
vector<int> left_nums(com_nums.begin(),it);
vector<int> right_nums(it+1,com_nums.end());
path.push_back(com_nums[i]);
back_track(0,left_nums,right_nums,max_size);
path.pop_back();
}
}
vector<vector<int>> permuteUnique(vector<int>& nums)
{
vector<int> nul;
return_vector.clear();
path.clear();
nul.clear();
sort(nums.begin(),nums.end());
//std::cout<<" nul.size() "<< nul.size()<<std::endl;
back_track(0,nums,nul,nums.size());
return return_vector;
}
};
三、运行结果

版权声明:本文为taiyuezyh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。