问题分析:
给一个整数数组,如 nums = [1, 2, 3]
返回所有可能的子集(包括空集)
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
解决思路:
这个问题第一眼没有考虑到可以使用递归解法,参照其他博客,
[]
/ \
/ \
/ \
[1] []
/ \ / \
/ \ / \
[1 2] [1] [2] []
/ \ / \ / \ / \
[1 2 3] [1 2] [1 3] [1] [2 3] [2] [3] []
代码如下:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> res_elm;
vector<vector<int>> res;
sort(nums.begin(), nums.end());
//res.push_back(res_elm);
add_result(nums, 0, res_elm, res);
return res;
}
void add_result(vector<int> &nums, int pos, vector<int> &res_elm, vector<vector<int>> &res)
{
for (int i = pos; i < nums.size(); i++)
{
res_elm.push_back(nums[i]);
add_result(nums, i+1, res_elm, res);
res_elm.pop_back();
}
res.push_back(res_elm);
}
};
学习内容:
递归思想