全分列II(力扣47)

羊蹓狼  论坛元老 | 2025-2-13 11:28:11 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这道题与全分列(力扣46)-CSDN博客 的不同就在于聚集中有雷同元素,我们唯一多的操作就是在同一层递归中也要去重,其他的都与上一题雷同。大家可以联合我下面的代码及详细表明理解此题。
代码及详细表明如下:
  1. class Solution {
  2. public:
  3.     vector<int> path;
  4.     vector<vector<int>> result;
  5.     void backtracking(vector<int>& nums,vector<int>& used){
  6.         //终止条件
  7.        if(path.size() == nums.size()){
  8.         result.push_back(path);
  9.         return;
  10.        }
  11.        for(int i = 0;i < nums.size();i++){
  12.         //同层递归去重
  13.           if(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == 0){
  14.             continue;
  15.           }
  16.           //这个去重保证一个排列中不重复使用元素(注意是不重复使用,并不意味着排列中不出现相同元素,因为集合中本身就有相同元素)
  17.           if(used[i] == 1) continue;
  18.           path.push_back(nums[i]);
  19.           used[i] = 1;
  20.           backtracking(nums,used);//递归
  21.           //回溯
  22.           path.pop_back();
  23.           used[i] = 0;
  24.        }
  25.        return;
  26.     }
  27.     vector<vector<int>> permuteUnique(vector<int>& nums) {
  28.         result.clear();
  29.         path.clear();
  30.         sort(nums.begin(), nums.end()); // 排序
  31.         vector<int> used(nums.size(),0);
  32.         backtracking(nums,used);
  33.         return result;
  34.     }
  35. };
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表