Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
Example:
board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] Given word = "ABCCED", return true. Given word = "SEE", return true. Given word = "ABCB", return false.
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, i, j, 0, visited))
return true;
}
}
return false;
}
private boolean dfs(char[][] board, String word,
int x, int y, int start, boolean[][] visited) {
if (start == word.length())
return true;
if (x < 0 || y < 0 || x >= board.length || y >= board[0].length)
return false;
if (visited[x][y])
return false;
if (board[x][y] != word.charAt(start))
return false;
visited[x][y] = true;
boolean res = dfs(board, word, x - 1, y, start + 1, visited) ||
dfs(board, word, x + 1, y, start + 1, visited) ||
dfs(board, word, x, y - 1, start + 1, visited) ||
dfs(board, word, x, y + 1, start + 1, visited);
visited[x][y] = false;
return res;
}
}

本文介绍了一个二维网格中查找指定单词的算法实现。该算法通过深度优先搜索(DFS)递归地检查每个单元格,判断是否能按顺序拼接出目标单词,并确保不重复使用同一单元格内的字母。
4375

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



