
实际上和上一题差不多,可以直接套用上一题回溯递归的函数写出来,复杂度比较高,因为是按照数字个数依次代入函数,然后通通放入一个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();
        }
    }
}; 
                















![QList 的访问方式list.at(index) 和 list[index] 对比](https://i-blog.csdnimg.cn/direct/95cedea9a379492ea24fa5bdc177cacc.png)


