Description
Given a set of distinct integers, nums, return all possible subsets (the power set).
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], [] ]
Solution
在15周Combinations的基础上进行递归实现。
要枚举出所有的子集,即依次从nums中选取出k个数,其中0 <= k <= nums.size()。
代码实现如下:
// 在combination基础上进行改良
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> resultList;
vector<int> result;
resultList.push_back(result);
for (int i = 1; i <= nums.size(); i++)
recursSubsets(nums, i, 0, resultList, result);
return resultList;
}
void recursSubsets(vector<int>& nums, int k, int begin, vector<vector<int>>& list, vector<int>& result) {
for (int i = begin; i < nums.size() && result.size() + (nums.size() - i) >= k; i++) {
int new_element = nums[i];
result.push_back(new_element);
if (result.size() == k)
list.push_back(result);
else
recursSubsets(nums, k, i + 1, list, result);
result.pop_back();
}
}
};
运行结果如下: