回溯法,一般可以解决如下几种问题:
- 组合问题:N个数里面按一定规则找出k个数的集合
- 切割问题:一个字符串按一定规则有几种切割方式
- 子集问题:一个N个数的集合里有多少符合条件的子集
- 排列问题:N个数按一定规则全排列,有几种排列方式
- 棋盘问题:N皇后,解数独等等
77. 组合
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void dfs(int t, int n, int k){
if(temp.size() == k){
result.push_back(temp);
return;
}
for(int i = t; i<=(n-(k-temp.size())+1); i++){
temp.push_back(i);
dfs(i+1, n, k);
temp.pop_back();
}
}
vector<vector<int>> combine( int n, int k) {
if(k<=0 || k>n){
return result;
}
dfs(1, n, k);
return result;
}
};
参考文章:代码随想录-77. 组合