一、求子集a
1、题目
已知一组数(其中无重复元素),求这组数可以组成的所有子集;
结果中不可有重复的子集
例如:
nums[] =[1,2,3]
结果为:【[], [1] , [1,2], [1,2,3], [1,3], [2] ,[2,3], [3] 】
解题思路:
利用栈(vector)来递归实现;
2、程序实现
#include<iostream>
#include<vector>
using namespace std;
class solution
{
public:
std::vector<std::vector<int>> subsets(std::vector<int>& nums)
{
std::vector<std::vector<int>> result;
std::vector<int> item;
result.push_back(item);
generate(0, nums, item,result);
return result;
}
private:
void generate(int i ,
std::vector<int>&nums,
std::vector<int>&item,
std::vector<std::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()
{
std::vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
std::vector<std::vector<int>> result;
solution solve;
result = solve.subsets(nums);
for(int i = 0; i < result.size(); i++)
{
if(result[i].size() == 0)
{
printf("[]");
}
for(int j = 0; j<result[i].size(); j++)
{
printf("[%d]",result[i][j]);
}
printf("\n");
}
return 0;
}
3、结果展示
二、求子集b
1、题目
已知一组数(其中有重复元素)