class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ret;
vector<int> temp;
sort(nums.begin(),nums.end());
for(int i=0;i<=nums.size();i++){
combine(ret,temp,0,0,i,nums);
}
return ret;
}
void combine(vector<vector<int>> &re,vector<int>& temp,int start,int tempLen,int k,vector<int>& nums){
if(tempLen == k){
re.push_back(temp);
}
for(int i = start;i<nums.size();i++){
temp.push_back(nums[i]);
combine(re,temp,i+1,tempLen+1,k,nums);
temp.pop_back();
while(i<nums.size() - 1 && nums[i] == nums[i+1]){
i++;
}
}
}
};
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ret;
vector<int> temp;
sort(nums.begin(),nums.end());
for(int i=0;i<=nums.size();i++){
combine(ret,temp,0,0,i,nums);
}
return ret;
}
void combine(vector<vector<int>> &re,vector<int>& temp,int start,int tempLen,int k,vector<int>& nums){
if(tempLen == k){
re.push_back(temp);
}
for(int i = start;i<nums.size();i++){
temp.push_back(nums[i]);
combine(re,temp,i+1,tempLen+1,k,nums);
temp.pop_back();
while(i<nums.size() - 1 && nums[i] == nums[i+1]){
i++;
}
}
}
};
本文介绍了一个使用递归方法实现的子集生成算法。该算法能够为给定的整数数组生成所有可能的子集组合,并确保输出结果中不包含重复的子集。通过递归调用,算法遍历所有可能的元素组合,最终将有效的子集添加到结果集中。
1192

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



