c++:回溯法
只是单纯地记录一下回溯法的相关代码,所以并没有具体的讲解。
1.求出集合{1,2,3}中的所有不重复的子集
源代码
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
class Solution
{
public:
vector<vector<int>> subsets(vector<int>& nums,vector<vector<int>>& sets)
{
vector<int> item;
sets.push_back(item);
generate(0, nums, item, sets);
return sets;
}
private:
void generate(int i, vector<int>& nums, vector<int>& item, vector<vector<int>>& sets)
{
if (i >= nums.size())
return ;
item.push_back(nums[i]);
sets.push_back(item);
generate(i + 1, nums, item, sets);
item.pop_back();
generate(i + 1, nums, item, sets);
}
};
int main()
{
vector<int> nums = { 1,2,3 };
vector<vector<int>> result;
Solution s;
result = s.subsets(nums,result);
for (int i = 0; i < result.size(); i++)
{
for (int j = 0; j < result[i].size(); j++)
printf("[%d]", result[i][j]);
cout << endl;
}
return 0;
}