子集问题 #1

笔试时遇到的编程题,难度不大,但是当时怎么都过不了,然后笔试系统发公告说这道题按照各自想法写就行,最后都会人工评判。

描述:

输入一个数组,要求返回这个数组中可能存在的由数组成员组成的子集,不要求顺序,包含空集。

我的思路

使用递归的方式得到所有可能的子集

部分样例

1、
输入:

[1,2,3]

输出:

[[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]

代码

class Solution {
public:
    // 保存结果
    vector<vector<int>> res;

    // 主要调用函数
    vector<vector<int> > SubSets(vector<int>& a) {
        vector<int> b;
        func(a, b, 0);
        return res;
    }
    
    // ai是当前的下标
    void func(vector<int>& a, vector<int> b, int ai) {
        // 当全部元素访问过后,结束递归
        if(ai==a.size()) {
            res.push_back(b);
            return ;
        }
        func(a, b, ai+1);
        b.push_back(a[ai]);
        func(a, b, ai+1);
        return ;
    }
};
posted @ 2022-03-20 22:15  不正游侠  阅读(1)  评论(0编辑  收藏  举报