回溯算法
重点概括
回溯模板
public void dfs(参数)
{
if(满足终止条件)
{
存放结果
return;
}
for(遍历本层集合中的元素)
{
处理结点;
dfs(参数);//递归
撤销处理该结点; //回溯
}
}
77. 组合
题目链接:77. 组合
使用itertools中的combinations库来解决
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
from itertools import combinations
res=[]
nums=[i for i in range(1,n+1)]
List=combinations(nums,k)
for i in List:
res.append(list(i))
return res
回溯的写法
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res=[]
path=[]
def backtracking(n,k,start_index):
if len(path)==k:
res.append(path[:])
return
for i in range(start_index,n+1):#从1开始
path.append(i)
backtracking(n,k,i+1) # 递归
path.pop()
backtracking(n,k,1)
return res
总结
其实就是自己调用自己,先从1开始搜索,再从2 开始搜索。