day24
代码随想录
2023.12.22
从今天开始新篇章,回溯算法。
1. 77组合
之前二叉树对递归还算比较熟悉,但回溯还是有些生疏,这道题开始也是有些不懂,看了文字讲解,才有些懵懂,最后对着参考代码手动推了一遍过程,才理解,最后独立实现代码。
其实回溯就是枚举,同样是将所有情况遍历一遍,感觉是没有办法的办法,毕竟枚举效率低。
这道题暴力for循环就是一层for确定一个值,k等于几,就几个for。回溯也是类似的思想,首先确定回溯重点,也就是长度达到了k,此时将数据加入到result中即可,下来就是回溯的过程了,确定一个值,再将剩下值递归下去,然后结束一层就要弹出该值。
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
vector<vector<int>> combine(int n, int k) {
backtravel(n,k,1);
return result;
}
void backtravel(int n,int k, int index){
if(temp.size()==k){
result.push_back(temp);
return;
}
else{
for(int i=index;i<=n;i++){
temp.push_back(i);
backtravel(n,k,i+1);
temp.pop_back();
}
}
}
};