马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这道题与全分列(力扣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[i] == nums[i - 1] && used[i - 1] == 0){
- continue;
- }
- //这个去重保证一个排列中不重复使用元素(注意是不重复使用,并不意味着排列中不出现相同元素,因为集合中本身就有相同元素)
- if(used[i] == 1) continue;
- path.push_back(nums[i]);
- used[i] = 1;
- backtracking(nums,used);//递归
- //回溯
- path.pop_back();
- used[i] = 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企服之家,中国第一个企服评测及商务社交产业平台。 |