主题:递归与回溯搜索
LeetCode 78
![](https://img-blog.csdn.net/20180313141609597?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjk5OTYyODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
给你一组不重复的整数,输出几个所有可能的组合顺序,输出结果不能有重复。
解法一:递归(空间复杂度太大了,这个方法不好)
#include "stdafx.h"
#include
#include
#include
using namespace std;void generate(vector& nums, int start, vector>& res, vector& res_sub);
//预测有2的len次幂个结果
vector> subsets(vector& nums) {vector> res;vector res_sub;//插入空集res.push_back(res_sub);generate(nums, 0, res, res_sub);return res;
}
void generate(vector& nums, int start, vector>& res, vector& res_sub) {if (start >= nums.size()) {return;}//思想:从左至右依次组合,记录新组合之后,去掉队尾,加入新元素继续向后组合for (int i = start; i }int main()
{vector nums = { 1,2,3 };subsets(nums);return 0;
}
解法二: