一.问题描述
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], [] ]
二.我的解题思路
这道题也是很简单的遍历问题,采用子集树+回溯法就可以解决。测试通过的程序如下:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> curr;
vector<vector<int>> res;
int len = nums.size();
back_trace(res,curr,1,len,nums);
return res;
}
void back_trace(vector<vector<int>> &res, vector<int> &curr, int i, int n, vector<int>& nums){
if(i>n) {res.push_back(curr);return;}
curr.push_back(nums[i-1]);
back_trace(res,curr,i+1,n,nums);
curr.pop_back();
back_trace(res,curr,i+1,n,nums);
}
};