子集问题 #1
笔试时遇到的编程题,难度不大,但是当时怎么都过不了,然后笔试系统发公告说这道题按照各自想法写就行,最后都会人工评判。
描述:
输入一个数组,要求返回这个数组中可能存在的由数组成员组成的子集,不要求顺序,包含空集。
我的思路
使用递归的方式得到所有可能的子集
部分样例
1、
输入:
[1,2,3]
输出:
[[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]
代码
class Solution {
public:
// 保存结果
vector> res;
// 主要调用函数
vector > SubSets(vector& a) {
vector b;
func(a, b, 0);
return res;
}
// ai是当前的下标
void func(vector& a, vector 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 ;
}
};