题目链接
解题思路
今天这道题目是采用了回溯的思想
所谓回溯,就是穷举问题的所有可能性,从中选择合适的结果,返回返回上一层,继续选择。
读者应该能够感觉到回溯算法的结果表现出来就是一个树的结构
代码实现
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracing(int n, int k, int startIndex)
{
//如果当前path的大小等于k 那么就将该路径放入result
if(path.size() == k)
{
result.push_back(path);
return ;
}
//考虑回溯
for(int i = startIndex; i <= n; ++i)
{
path.push_back(i);
backtracing(n, k, i+1);
//回溯
path.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
backtracing(n, k, 1);
return result;
}
};