leetcode题目例题解析(二)
Subsets
题目描述:
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],[]]
题意解析:
这道题不是很难,找出一个集合的所有子集,需要注意的是:
1.空集也包括
2.不能出现重复的集合
解题思路:
这道题就是一个排列组合的题目,排列组合我们可以通过递归的函数来实现,每一层都决定一个元素是否添加到结果中,这样有n个元素的集合,一共有2^n个子集。
代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
int len = nums.size();
vector<vector<int>> ans;
vector<int> one;
find(nums, one, ans, 0, len);
return ans;
}
/*这里要注意的是,传递的第二个参数是值传递的,这里不能用引用传递,保证结果之间不会相互影响。*/
void find(vector<int>& nums, vector<int> one, vector<vector<int>> &ans, int deep, int max) {
if (deep == max) {
ans.push_back(one);
} else {
find(nums, one, ans, deep+1, max);
one.push_back(nums[deep]);
find(nums, one, ans, deep+1, max);
}
}
};