标签:
题目:
Given a set of distinct integers, nums, return all possible subsets.
Note:
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) { const int len = nums.size(); std::sort(nums.begin(), nums.end()); vector<vector<int> > ret = Solution::subsubsets(nums, 0, len-1); vector<int> none; ret.push_back(none); return ret; } static vector<vector<int> > subsubsets(vector<int>& nums, int begin, int end) { vector<vector<int> > ret; if ( begin>end ) return ret; for ( int i = begin; i <=end; ++i ) { // puts the curr value in vector<int> curr; curr.push_back(nums[i]); ret.push_back(curr); // get the subset vector<vector<int> > subset = Solution::subsubsets(nums, i+1, end); for ( int j = 0; j < subset.size(); ++j ) { //ret.push_back(subset[j]); subset[j].insert(subset[j].begin(), nums[i]); ret.push_back(subset[j]); } } return ret; } };
tips:
每层递归的任务是活的传入数组的全部子集
1. 留出第i个元素
2. 把i+1到end的元素送到下一层递归
3. 递归终止条件是begin>end
返回下一集全部子集后,算上第i个元素后的全部集合如下:
1)第i个元素单独算一个
2)第i个元素 + 子集中每个元素
这样递归到第0个元素,就得到了全部的非空子集;再根据题目要求补上空集。
============================================
完成之后觉得好像哪里不对。{1,2,3} 如果留下了1传入{2,3}时,这个过程中已经获得了{2,3}全部子集。
修改后的代码如下:
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { const int len = nums.size(); std::sort(nums.begin(), nums.end()); vector<vector<int> > ret = Solution::subsubsets(nums, 0, len-1); vector<int> none; ret.push_back(none); return ret; } static vector<vector<int> > subsubsets(vector<int>& nums, int begin, int end) { vector<vector<int> > ret; if ( begin>end ) return ret; // puts the curr value in vector<int> curr; curr.push_back(nums[begin]); ret.push_back(curr); // get the subset vector<vector<int> > subset = Solution::subsubsets(nums, begin+1, end); for ( int j = 0; j < subset.size(); ++j ) { ret.push_back(subset[j]); subset[j].insert(subset[j].begin(), nums[begin]); ret.push_back(subset[j]); } return ret; } };
tips:
这个版本整理了逻辑误区。
标签:
原文地址:http://www.cnblogs.com/xbf9xbf/p/4516802.html