
【解题思路】
用回溯的方法,查询board[ ][ ]这个二维数组。
class Solution {
public boolean exist(char[][] board, String word) {
int m = board.length;
int n = board[0].length;
boolean[][] visited = new boolean[m][n];
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(DFS(board, word, visited, i, j, 0))
{
return true;
}
}
}
return false;
}
public boolean DFS(char[][] board, String word, boolean[][] visited, int row, int col, int k)
{
if(board[row][col] != word.charAt(k))
{
return false;
}
else if(k == word.length() - 1)
{
return true;
}
visited[row][col] = true;
boolean flag = false;
int[][] directions = {{0,1},{1,0},{0,-1},{-1,0}};
for(int[] dire : directions)
{
int newRow = row + dire[0];
int newCol = col + dire[1];
if(newRow >= 0 && newCol >= 0 && newRow < board.length && newCol < board[0].length)
{
if(!visited[newRow][newCol])
{
flag = DFS(board, word, visited, newRow, newCol, k+1);
if(flag) break;
}
}
}
visited[row][col] = false;
return flag;
}
}
这篇博客介绍了一种利用回溯算法在二维字符数组中查找目标单词的方法。通过DFS深度优先搜索,遍历每个可能的路径,检查是否能形成目标单词。在搜索过程中,使用了visited数组来跟踪已访问的单元格,避免重复路径。当找到单词的最后一个字符时返回true,否则继续搜索相邻单元格。
210

被折叠的 条评论
为什么被折叠?



