题目:
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
思路:
这是最标准的一道回溯法题目。对于数组中的每一个数,要么将它加入到结果中,要么不加入。注意下面的代码其实就是回溯法的标准模板,建议大家好好领会,基本上所有的回溯法题目都可以套用这个模板。
代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ret;
vector<int> line;
subset(ret, line, nums, 0);
return ret;
}
private:
void subset(vector<vector<int>> &ret, vector<int> &line,
vector<int> &nums, int index) {
if (index == nums.size()) {
ret.push_back(line);
return;
}
subset(ret, line, nums, index + 1); // exclude nums[index]
line.push_back(nums[index]);
subset(ret, line, nums, index + 1); // include nums[index]
line.pop_back();
}
};