题目描述
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
board =[ [‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false
方法:回溯
定义一个方法:
可以将每个点的四个方向想象为四叉树,使用递归方法遍历:
- 如果当前遍历的字母超出单词,说明在二维网格中找到了该单词,则返回true
- 如果当前网格中点的第一/二维下标小于0或者超出网格,说明越界了,返回false
- 如果当前网格中点对应的值和当前遍历的字母不相同,则返回false
- 四个方向中有一个方向能走通,则返回true
【为了避免重复搜索,当查找到符合要求的点时,需要先将该点进行标记,回溯时,再将该点进行还原。如下:】
代码:
class Solution {
public boolean exist(char[][] board, String word) {
for(int i = 0;i<board.length;i<