回溯算法练习——1、组合问题(C++和Python描述)_Ma Sizhou-CSDN博客
主要是从这学的
class Solution
{
private:
vector<vector<int>> ans;
vector<int> temp;
void backtrack(int n,int sit,int k)
{
if(temp.size()==k)
{
ans.emplace_back(temp);
return;
}
for(int i = sit,i<=n;++k)
{
temp.emplace_back(i);
backtrack(n , sit+1,k);
temp.pop_back();
}
}
public:
vector<vector<int>> combine(int n,int k)
{
backtracking(n,1,k);
return res;
}
};
我认为值得总结的几点是:
1.首先我写回溯算法总是容易把函数的参数写得超级多,多的时候得有6、7个参数,这个文章提醒了我,有的对象不一定要作为参数传进来,比如说temp容器,包括ans容器,这些都可以作为Solution类成员变量,在类内调用函数的时候都可以直接拿到
2.是这个横向遍历和纵向遍历的思想,把整个函数的思路搞清了,每次取完这一位,下一层一定是再次往后取的,还有就是回溯算法最大的一个特点就是用完恢复原状,在递归调用回溯函数以后,都要将操作复原。