力扣刷题记录74.1-----47. 全排列 II


一、题目

在这里插入图片描述

二、代码

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版权协议,转载请附上原文出处链接和本声明。