题解 | #集合的所有子集(一)#

集合的所有子集(一)

http://www.nowcoder.com/practice/c333d551eb6243e0b4d92e37a06fbfc9

递归求解

求子集时可以先规定一个quota,从1开始直到集合长度,每次只把quota数量的元素压入向量中。

代码如下:

class Solution {
public:
    vector<vector<int> > subsets(vector<int> &S) {
        vector<vector<int> > ret;
        int n = S.size();
        vector<int> tmp;
        ret.push_back(tmp); // 先压入空集
        sort(S.begin(), S.end());
        for(int i = 1; i <= S.size(); i++){
            takeSub(S,ret,tmp,0,i); // i从1到S.size,每次只取i个元素放入ret中
        }
        return ret;
    }
    void takeSub(vector<int>& S, vector<vector<int> >& ret, vector<int> tmp, int start, int quota){
        if(quota==tmp.size()){ // 当tmp长度达到quota时,代表符合要求,压入ret中
            ret.push_back(tmp);
            return;
        }
        for(int i = start; i < S.size(); i++){
            tmp.push_back(S[i]);
            takeSub(S, ret, tmp, i+1, quota); // 递归选取元素
            tmp.pop_back();
        }
    }
};
全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务