Subsets

来源:互联网 发布:dream it possible 编辑:程序博客网 时间:2024/06/05 04:12

可以发现S=[1, 2] 的解就是 把S = [1]的所有解末尾添上2,然后再并上S = [1]里面的原有解。

class Solution {public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int> > res;vector<int> emp;res.push_back(emp);sort(nums.begin(), nums.end());if (nums.size() == 0) return res;for (vector<int>::iterator ind = nums.begin(); ind < nums.end(); ++ind){int size = res.size();for (int i = 0; i < size; ++i) {vector<int> v(res[i]);v.push_back(*ind);res.push_back(v);}}return res;}};

dfs:如果单独看某一个元素,它都有两种选择:"被包含在子集中"和"不被包含在子集中",对于元素个数为n、且不含重复元素的S,子集总数是2n

class Solution {public:vector<vector<int> > subsets(vector<int> &S) {vector<int> v;sort(S.begin(), S.end());subsetsCore(S, 0, v);return res;}private:vector<vector<int> > res;void subsetsCore(vector<int> &S, int start, vector<int> &v) {if (start == S.size()) { res.push_back(v); return; }vector<int> v2(v);v.push_back(S[start]);subsetsCore(S, start + 1, v); //包含S[start]subsetsCore(S, start + 1, v2); //不包含S[start]}};




0 0
原创粉丝点击