【算法】回溯法
2024-04-22 23:00:45
算法思想
回溯(Backtrack)是一种搜索方法,常用于排列问题、搜索问题的求解。其基本思想为DFS(Depth-First Search):分步求解,步步为营,一旦探索完该状态的所有可能性,就回退到前一个状态。
回溯算法的模板大概如下:
1 | class Solution { |
回溯函数里,首先判断是否为终止状态,若是,则将临时状态加入最终结果,若否,则遍历所有的可行选择,加入临时状态,接着继续回溯,等待回溯完成,将选择从临时状态中删除。
实战
回溯可以应用于排列问题,比如说Leetcode 46. Permutations:
1 | class Solution { |
回溯函数中,先判断是否为一个可行的全排列,若是,则将其加入结果列表,否则就挑选合适的数字加入临时状态,挑选的判据为该数字是否已经出现过。
也可以应用于搜索问题上,比如Leetcode 797. All Paths From Source to Target:
1 | class Solution { |
回溯也可以变得很复杂,比如有Leetcode 22. Generate Parentheses:
1 | class Solution { |
生成括号时,合法性判据为已经生成的左右括号个数。