羊蹓狼 发表于 2025-2-13 11:28:11

全分列II(力扣47)

这道题与全分列(力扣46)-CSDN博客 的不同就在于聚集中有雷同元素,我们唯一多的操作就是在同一层递归中也要去重,其他的都与上一题雷同。大家可以联合我下面的代码及详细表明理解此题。
代码及详细表明如下:
class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(vector<int>& nums,vector<int>& used){
      //终止条件
       if(path.size() == nums.size()){
      result.push_back(path);
      return;
       }
       for(int i = 0;i < nums.size();i++){
      //同层递归去重
          if(i > 0 && nums == nums && used == 0){
            continue;
          }
          //这个去重保证一个排列中不重复使用元素(注意是不重复使用,并不意味着排列中不出现相同元素,因为集合中本身就有相同元素)
          if(used == 1) continue;
          path.push_back(nums);
          used = 1;
          backtracking(nums,used);//递归
          //回溯
          path.pop_back();
          used = 0;
       }
       return;
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
      result.clear();
      path.clear();
      sort(nums.begin(), nums.end()); // 排序
      vector<int> used(nums.size(),0);
      backtracking(nums,used);
      return result;
    }
};

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 全分列II(力扣47)