回溯:
class Solution {
public boolean exist(char[][] board, String word) {
int m = board.length;
int n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (dfs(board, i, j, word, 0)) {
return true;
}
}
}
return false;
}
private boolean dfs(char[][] board, int row, int col, String word, int wordIndex) {
// 结束条件
if (row < 0 || col < 0 || row >= board.length || col >= board[0].length || board[row][col] != word.charAt(wordIndex)) {
return false;
}
if (wordIndex == word.length() - 1) {
return true;
}
char temp = board[row][col];
wordIndex++;
board[row][col] = '$';// 避免重复使用
boolean result = (
dfs(board, row - 1, col, word, wordIndex) ||
dfs(board, row, col - 1, word, wordIndex) ||
dfs(board, row + 1, col, word, wordIndex) ||
dfs(board, row, col + 1, word, wordIndex)
);
board[row][col] = temp;// 还原 否则下条路径会出错
return result;
}
}