给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
Claim:解集不能包含重复的子集。
Example:
输入: nums = [1,2,3]
输出:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Thinking:
如上图递归树所示,采用回溯算法,依次选取输出数据,当输出到最后一个数据后返回上一层继续选取输出数据 。
code:
class Solution {
public:
vector<vector<int>> ans; //存储最终结果
vector<int> tmp;
void find_subsets(vector<int>& nums, int i)
{
if(i == nums.size()) //选取到最后一个数据
{
ans.push_back(tmp);
return;
}
tmp.push_back(nums[i]);
find_subsets(nums, i+1); //进入下一层
tmp.pop_back(); //退回上一层
find_subsets(nums, i+1); //继续选取数据
}
vector<vector<int>> subsets(vector<int>& nums) {
find_subsets(nums, 0);
return ans;
}
};