来源:代码随想录
本题的力扣链接:https://leetcode-cn.com/problems/combinations/
1、题目描述:
2、思路:
回溯三部曲:
3、代码:
3.1 python代码:
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = [] # 存放结果集合
path = [] # 存放符合条件的结果
def backtracking(n, k, startIndex):
if len(path) == k:
res.append(path.copy()) # 到达边界,保存结果集合
return
for i in range(startIndex, n+1):
path.append(i) # 处理节点
backtracking(n, k, i+1) # 递归
path.pop() # 处理完弹出
backtracking(n, k, 1)
return res
3.2 C++代码:
class Solution {
private:
vector<vector<int>> res; // 保存最终的结果集合
vector<int> path; // 保存递归时符合条件的结果
void backtracking(int n, int startIndex, int k){
if (path.size() == k){
res.push_back(path); // 到达叶子节点,保存结果
return;
}
for (int i = startIndex; i <= n; i++){
path.push_back(i); // 处理节点
backtracking(n, i+1, k); // 递归
path.pop_back(); // 回溯,撤销处理的节点
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtracking(n, 1, k);
return res;
}
};
4、总结:
回溯搜索算法模板: