class Solution {
public boolean exist(char[][] board, String word) {
char[] words = word.toCharArray();
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[0].length; j++) {
if(dfs(board, words, i, j, 0)) return true;//从【0】【0】开始一次DFS深度优先搜索路径 再向下继续跑
}
}
return false;
}
private boolean dfs(char[][] board, char[] word, int i, int j, int k) {
if(i >= board.length|| i<0 || j>=board[0].length|| j<0|| board[i][j]!= word[k] ) return false;
if(k == word.length -1) return true;//k 等于最后一个数 则匹配完成
board[i][j] = '\0';//防止搜索路径再跑重复
Boolean ans = dfs( board, word, i + 1, j, k + 1) ||dfs( board, word, i - 1, j, k + 1) ||
dfs( board, word, i, j + 1, k + 1)|| dfs( board, word, i, j-1, k + 1);//递归 有一条路径为true则为true
board[i][j] = word[k];//重点 还原 使得下一次搜索回原样 防止下条搜索路径 搜索不到
return ans;
}
}
DFS深度优先搜索 回溯 递归
最新推荐文章于 2023-02-21 11:54:31 发布