子集(78)
78. 子集 - 力扣(LeetCode)
解法:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums)
{
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
subsetsCore(nums, v, -1, res);
return res;
}
void subsetsCore(vector<int>& nums, vector<int> & v, int idx, vector<vector<int>> & res)
{
if (idx == nums.size()) {
return;
}
for (int j = idx+1; j < nums.size(); ++j) {
vector<int> tmp = v;
tmp.reserve(v.size() + 1);
tmp.push_back(nums[j]);
res.push_back(tmp);
subsetsCore(nums, tmp , j, res);
}
}
};
总结:
计算时间复杂度O(N*2expN),空间复杂度O(N),递推求解子集。