//将word转成字符数组
//遍历矩阵所有位置
//如果起点字符等于单词第一个字符,开始搜索
//没有找到单词返回false
//搜索函数
//边界或不匹配字符判断
//如果索引等于单词最后一个字符,说明找到整个单词,返回true
//标记访问过字符
//向四个方向搜索
//恢复标记
class Solution {
public boolean exist(char[][] board, String word) {
//将word转成字符数组
char [] words = word.toCharArray();
//遍历矩阵所有位置
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
//如果起点字符等于单词第一个字符,开始搜索
if (search(board, i, j, words, 0)) return true;
}
}
//没有找到单词返回false
return false;
}
//搜索函数
public boolean search(char[][] board,int i, int j,char[] words, int index){
//边界或不匹配字符判断
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] !=words[index]){
return false;
}
//如果索引等于单词最后一个字符,说明找到整个单词,返回true
if (index == words.length - 1){
return true;
}
//标记访问过字符
board[i][j] = '\0';
//向四个方向搜索
boolean res = search(board, i + 1, j, words, index + 1) || //向下搜索
search(board, i - 1, j, words, index + 1) || //向上搜索
search(board, i, j + 1, words, index + 1) || //向右搜索
search(board, i, j - 1, words, index + 1); //向左搜索
//恢复标记
board[i][j] = words[index];
return res;
}
}