回溯法

class Solution {
public:
    void help(vector<int> S,int len,int start,vector<vector<int> >&res,vector<int> ve){
        if(ve.size()==len){
            res.push_back(ve);
            return ;
        }
        for(int i=start;i<S.size();i++){
            ve.push_back(S[i]);
            help(S,len,i+1,res,ve);
            ve.pop_back();
        }
    }
    vector<vector<int> > subsets(vector<int> &S) {
        vector<vector<int> >res;
        vector<int> ve;
        for(int i=0;i<=S.size();i++){
            help(S,i,0,res,ve);
        }
        return res;
    }
};