回溯算法理论
回溯算法解决的问题
组合问题
切割问题
子集问题
排列问题
棋盘问题
算法模板
- 函数没有返回值
- 业界给回溯算法命名:backtracking
- 算法伪代码模板
def backtracking(self,参数):
if 终止条件:
收集结果;
return
for 元素集合:
处理节点
递归函数
回溯操作
return
77. 组合
题目
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按任何顺序返回答案。
class Solution:
def __init__(self):
self.res=[]
self.path=[]
def backtracking(self,n,k,startindex):
if len(self.path)==k:
self.res.append(self.path[:])
#为什么这里不能写append(self.path)
return
for i in range(startindex,n+1):
self.path.append(i)
self.backtracking(n,k,i+1)
self.path.pop(-1)
return
def combine(self, n: int, k: int) -> List[List[int]]:
self.backtracking(n,k,1)
return self.res