17. 子集 https://www.lintcode.com/problem/subsets/description
class Solution {
public:
vector<vector<int>> subsets(vector<int> &nums) {
vector<vector<int>> res;
vector<int> sub;
sort(nums.begin(),nums.end());
dfshelper(nums,0,sub,res);
return res;
}
void dfshelper(vector<int> &nums,int startIndex,vector<int> &sub,vector<vector<int>> &res) {
res.push_back(sub);
for (int i=startIndex;i<nums.size();i++) {
sub.push_back(nums[i]);
dfshelper(nums,i+1,sub,res);
sub.pop_back();
}
}
};
非递归做法:已知大小为n的集合中有2^n个子集,相当于0~2^n-1,把每个数按2进制展开写成n位,1对应的数字为有,0对应的数字为无,只要遍历所有的数即可求出所有子集。