一、概念
回溯法是一种优选搜索法,按照优先条件深度优先搜索,以达到目标。当搜索到某一步时,发现原先选择并不是最优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术成为回溯法,而满足回溯条件的某个状态成为“回溯点”
二、思想
回溯法是从初始状态出发,按照深度优先搜索的方式,根据产生子节点的条件约束,搜索问题的解。当发现当前节点不满足条件时,就回溯,尝试其他的路径。回溯法是一种“能进则进,进不了则换,换不了则退”
回溯法的核心是递归,递归一定要会有个函数出口,否则会有死循环。
三、应用示例
1、N皇后
class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> res = new ArrayList<>();
int[] queen = new int[n];
helper(queen, 0, n, res);
return res;
}
private void helper(int[] queen, int row, int n, List<List