回溯算法
定义:
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜素尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为回溯点。许多复杂的,规模较大的问题都可以使用回溯法。
回溯算法模板
void backtracking(参数){
if(终止条件){
收集结果;
return;
}
//横向遍历广度
for(集合元素){
处理结点;
//递归的深度
递归函数;
回溯操作;
}
return;
}
两道例题(力扣)
组合
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。你可以按 任何顺序 返回答案。
//示例1
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
//示例2
输入:n = 1, k = 1
输出:[[1]]
class Solution {