*77. 组合
回溯法。result记录最终结果,cur_result记录单个组合的结果。
比较难理解的地方在于回溯要撤销对于结点的处理,也就是cur_result.pop_back();
在for循环中,cur_result.emplace_back(i);将当前元素压入单个组合结果中,递归调用来对后续元素进行组合。当递归调用结束后,需要将当前节点弹出来继续迭代下一种可能。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
// c++
class Solution {
public:
void backtracking(vector<vector<int>>& result, vector<int>& cur_result, int left, int right, int k){
if(cur_result.size() == k){
result.emplace_back(cur_result);
return;
}
for(int i=left; i<=right; i++){
cur_result.emplace_back(i);
backtracking(result, cur_result, i+1, right, k)