首页 » 编程之美 » 正文

[leetcode_78]Subsets

给定一个数组,比如{1,2,3,4} 求出 该集合的所有子集。
其中WA一次,因为要求升序排列。
搜索即可。

int cmp(int a,int b) {
    return a < b;
}
class Solution {
public:
    void AddItemStep(int i,int k,vector<int>&S,vector<vector<int>>&ans,vector<int>&item) {
        if(item.size() == k) {
            ans.push_back(item);
            return;
        }
        else {
            if(i >= S.size())return;
            item.push_back(S[i]);
            AddItemStep(i+1,k,S,ans,item);
            item.pop_back();
            AddItemStep(i+1,k,S,ans,item);
        }
    }
    void AddItem(int k,vector<int> &S,vector<vector<int>>&ans) {
        int i = 0;
        vector<int> item;
        item.clear();
        AddItemStep(i,k,S,ans,item);
    }
    vector<vector<int> > subsets(vector<int> &S) {
        sort(S.begin(),S.end(),cmp);
        vector<vector<int>>ans;
        ans.clear();
        vector<int>item;
        item.clear();
        ans.push_back(item);
        for(int i = 1;i <= S.size();i++) {
            AddItem(i,S,ans);
        }
        return ans;
    }
};

发表评论