DFS VS BFS
DFS更适合搜索树形状态空间
- 递归本身就会产生树的结构
- 可以用一个全局变量维护状态较为复杂的信息(子集/排列)
- 不需要队列, 节省空间
BFS适合求最小代价
、最少步数
之类的题目
- BFS是按层次序搜索, 任意时刻队列中至多只有两层
在状态空间为一般的图
时(需要判重), DFS/BFS均可
实战
电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
1 | func letterCombinations(digits string) []string { |
N 皇后
1 | func solveNQueens(n int) [][]string { |
岛屿数量
解法一: DFS
1 | func numIslands(grid [][]byte) int { |
解法二: BFS
1 | func numIslands(grid [][]byte) int { |
最小基因变化
1 | func minMutation(start string, end string, bank []string) int { |