| 题目 | 思路 | 备注 |
|---|---|---|
| 岛屿数量 | BFS遍历,遇到1,则res++,并将该单元格(含)相邻的位置全布置为0 | |
| 括号生成 | DFS递归,记录剩余没用掉的左括号和右括号(核心: 任何位置上左括号数量都要大于或等于右括号数量) 1. 只要还有左括号剩余,就可以向当前结果串中增加左扣号 1. 仅当剩余右括号数量严格比剩余左括号多时,才可向结果中增加右括号 |
开始dfs: dfs(“”,n,n, res) 有左括号剩余:if(left>0) dfs(curStr+”(“, left-1, right, res) 剩余右括号较多时:if(right > left && right > 0) dfs(curStr+”)”, left, right-1, res) |
| 单词搜索 | 在矩阵中搜索单词,从任意位置进行左右上下的dfs即可。注意为了不重复搜到同一单元格,要把当前单元格置为非法字符,左右上下dfs后再恢复成原字符 | ![]() |
| 单词搜索II | 同上,使用dfs+回溯法,但此题要求返回所有存在于矩阵中的单词:> 1.先根据单词表建立一个单词查找树 |
2.从每一个位置进行上下左右的dfs,并依据单词查找树进行判定 3.在dfs的过程中,为了让单元格不被重复使用,在dfs过程中,先置为非法值,dfs之后再恢复
|
|
| 单词接龙 | BFS遍历,一个队列+一个visited集合,每到一层,依据当前单词找一个可接龙且未用过的新单词来构建下一层,只到某一层中某个词是endWord。最后返回层数即可 |
|
| 被围绕的区域
| 处于四周边缘的一定不会被围绕,因此,从四周向内执行DFS搜索,对遇到的’O’标记成T。 最后将O(被包围的)转换成X,将T(从边缘找到的)再恢复成O
|
|
| 矩阵中最长递增路径
| DFS遍历,计算从每个位置起走过的递增路径长度
要注意,声明一个长度为mn的数组(cache)做为缓存,用以记录从grid[i][j]为起点的最大递增长度为: cache[in+j]。 此外需要记录一个preVal值,只有当grid[i][j]>preVal时,才能继续dfs,进而保证路径的递增性 |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |

