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);
}
}
};