全分列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]