LeetCode 77. 组合
这道题要用到递归和回溯。
每次递归时用一个for循环取遍所有有效的数字,同时递归下一位,递归完之后回溯时要记得删掉最后一个数。
每次递归用一个一维数组存放每条路径,满足递归结束条件(数组长度等于规定长度)后用一个二维数组存放所有的结果集。
class Solution {
private:
vector<vector<int>>result;//用二维数组存放结果集
vector<int>path;//用一维数组存放一组合理数组
public:
void travel(int n, int k, int startx) {
if(path.size() == k){//当数组长度等于k时,记录结果然后返回
result.push_back(path);
return;
}
for(int i = startx; i <= n - (k - path.size()) + 1; i++) {//从标记开始位置开始存放
path.push_back(i);
travel(n, k, i+1);//递归,传入下一个要存放的起始位置位置
path.pop_back();//注意递归完后要将最后一个数收回
}
}
vector<vector<int>> combine(int n, int k) {
travel(n, k, 1);
return result;
}
};
今天有事,没有多少时间来写这个,辛亏今日就解决这道题!