LC Note
public boolean exist(char[][] board, String word) {
if (board == null || board.length == 0) {
return false;
}
int m = board.length;
int n = board[0].length;
boolean[][] visit = new boolean[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < board[0].length; j++) {
if (dfs(board, word, i, j, 0, visit))
return true;
}
}
return false;
}
public boolean dfs(char[][] board, String word, int i, int j, int index, boolean[][] visit) {
if (index == word.length())
return true;
int m = board.length;
int n = board[0].length;
if (i < 0 || i >= m || j < 0 || j>= n || board[i][j] != word.charAt(index)|| visit[i][j])
return false;
visit[i][j] = true;
if ( dfs(board, word, i + 1, j, index + 1, visit) ||
dfs(board, word, i - 1, j, index + 1, visit) ||
dfs(board, word, i, j + 1, index + 1, visit) ||
dfs(board, word, i, j - 1, index + 1, visit)
){
return true;
}
visit[i][j] = false;
return false;
}