实际上和上一题差不多,可以直接套用上一题回溯递归的函数写出来,复杂度比较高,因为是按照数字个数依次代入函数,然后通通放入一个vector中。
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> vec;
vector<vector<int>> result(1,vec);
for(int i=1;i<=nums.size();i++){
vector<vector<int>> v;
vector<int> ve;
hs(v,ve,i,nums);
result.insert(result.end(),v.begin(),v.end());
v.clear();
}
return result;
}
void hs(vector<vector<int>> &result,vector<int> v,int k,vector<int> vec){
if(v.size()==k){result.push_back(v);return ;}
for(int i=0;i<vec.size();i++){
v.push_back(vec[i]);
vector<int> vv(vec);
vv.erase(vv.begin(),vv.begin()+i+1);
hs(result,v,k,vv);
v.pop_back();
}
}
};
然后自己再写了一遍,还是挺简单的,一遍过。
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> v;
vector<vector<int>> result;
hs(result,nums,v);
return result;
}
void hs(vector<vector<int>> &result,vector<int> nums,vector<int> v){
result.push_back(v);
for(int i=0;i<nums.size();i++){
v.push_back(nums[i]);
vector<int> vv(nums);
vv.erase(vv.begin(),vv.begin()+i+1);
hs(result,vv,v);
v.pop_back();
}
}
};