回溯的题目按照这套模板进行;
我感觉整体逻辑还是递归,只不过有了pop_back才是回溯概念;
cpp
class Solution
{
public:
vector<int> path;
vector<vector<int>> ans;
void backtracking(int n,int k,int startindex)
{
if(path.size()==k)
{
ans.push_back(path);
return;
}
for(int i=startindex;i<=n;++i)
{
path.push_back(i);
backtracking(n,k,i+1);
path.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
backtracking(n,k,1);
return ans;
}
};
216. 组合总和 III (按照模板来,不过c++没有直接计算容器sum的函数)写一个;
这道题,逻辑没有变,但是需要注意的是,只有当index达到了digits.size()的时候才能终止,也就是说会递归到底,然后完全加入以第一个数字第一个字符为首的字符串后再开始以第一个数字第二个字符为首的字符串。 当输入的index+1的长度等于digits的时候说明string的长度在这个for循环中也等于此,也就是说找到了一组;