给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[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>> result;
vector<int> item;
result.push_back(item);
generate(0,nums,item,result);
}
void generate(int i,vector<int> &nums,vector<int> &item,vector<vector<int>> &result) {
if(i == nums.size()) {
return;
}
item.push_back(nums[i]); //加入元素
result.push_back(item);
generate(i+1,nums,item,result);
item.pop_back(); //不加元素
generate(i+1,nums,item,result);
}
};
int main() {
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<vector<int> > result;
Solution s;
result = s.subsets(nums);
for(int i = 0; i < result.size(); i++) {
for(int j = 0; j < result[i].size(); j++) {
cout<<"["<<result[i][j]<<"]";
}
cout<<endl;
}
return 0;
}