[leetcode][回溯] Subsets

来源:互联网 发布:android 内置mysql 编辑:程序博客网 时间:2024/06/08 06:45

题目;

Given a set of distinct integers, nums, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • 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> > res;if (nums.empty()) return res;vector<int> oneSubset;sort(nums.begin(), nums.end());//排序subsetsCore(nums, 0, oneSubset, res);return res;}private:    void subsetsCore(vector<int>& nums, int start, vector<int> oneSubset, vector<vector<int> > &res){if (start == nums.size()){res.push_back(oneSubset);return;}subsetsCore(nums, start + 1, oneSubset, res);//start所指元素不在subset中oneSubset.push_back(nums[start]);subsetsCore(nums, start + 1, oneSubset, res);//start所指元素在subset中}};


注:由于题目中指明集合元素是“ distinct integers”,所以不必担心因含有重复元素而产生重复的子集的情况

下面是另一种思路,好像这种方法更通用一些,对于去重也比较方便

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {    vector<vector<int> > res;if (nums.empty()) return res;vector<int> oneSubset;sort(nums.begin(), nums.end());subsetsCore(nums, 0, oneSubset, res);return res;    }private:    void subsetsCore(vector<int> &nums, int start, vector<int> oneSubset, vector<vector<int> > &res){        res.push_back(oneSubset);        for(int i = start; i < nums.size(); ++i){            oneSubset.push_back(nums[i]);            subsetsCore(nums, i+1, oneSubset, res);            oneSubset.pop_back();        }    }};



0 0
原创粉丝点击