//不含重复数字的子集 递归算法
vector<vector<int>>subsets(vector<int>&nums){
if(nums.empty()) return {{}};
int n=nums.back();
nums.pop_back();
vector<vector<int>>res =subsets(nums);
int size=res.size();
for(int i=0;i<size;i++){
res.push_back(res[i]);
res.back().push_back(n);
}
return res;
}
//不含重复数字的子集 回溯算法
vector<vector<int >>res;
vector<vector<int>subsets(vector<int >&nums){
vector<int >track;
backtrack(nums, 0, track);
return res;
}
void backtrack(vector<int>& nums,int start,vector<int >&track){
res.push_back(track);
for(int i=start;i<nums.size();i++){
track.push_back(nums[i]);
backtrack(nums, start+1, track);
track.pop_back();
}
}
算法入门 30.求无重复数字的子集(递归算法+回溯算法)
最新推荐文章于 2025-04-18 00:55:47 发布
这篇博客介绍了两种方法来生成一个整数数组中不含重复数字的所有子集。首先,使用递归算法,通过在递归过程中排除已添加到子集的最后一个数字来避免重复。其次,采用回溯策略,遍历数组并在每一步将当前元素添加到当前子集或不添加,以确保子集中没有重复数字。这两种方法都有效地解决了问题并生成了所有可能的子集组合。

4319

被折叠的 条评论
为什么被折叠?



