回溯
public boolean exist(char[][] board, String word) {
char[] wordChars = word.toCharArray();
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (dfs(i, j, 0, board, wordChars)) {
return true;
}
}
}
return false;
}
boolean dfs(int row, int column, int idx, char[][] board, char[] wordChars) {
if (row < 0 || row >= board.length || column < 0 || column >= board[0].length
|| board[row][column] != wordChars[idx]) {
return false;
}
if (idx == wordChars.length - 1) {
return true;
}
board[row][column] = '\0';
boolean res = dfs(row, column + 1, idx + 1, board, wordChars)
|| dfs(row + 1, column, idx + 1, board, wordChars)
|| dfs(row, column - 1, idx + 1, board, wordChars)
|| dfs(row - 1, column, idx + 1, board, wordChars);
board[row][column] = wordChars[idx];
return res;
}