//dfs
class Solution {
public boolean exist(char[][] board, String word) {
if(board == null || board.length == 0 ||
board[0].length == 0 || word == null || word.length() ==0) return false;
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[0].length; j++) {
int start = 0;
if(board[i][j] == word.charAt(start)) {
boolean result = find(board, word, start, i, j);
if(result) {
return result;
}
}
}
}
return false;
}
private boolean find(char[][] board, String word, int start, int i, int j) {
if(start == word.length()) {
return true;
}
if(i < 0 || i > board.length - 1 ||
j < 0 || j > board[0].length - 1 || board[i][j] != word.charAt(start)) {
return false;
}
board[i][j] = '0';
boolean r = find(board, word, start + 1, i - 1, j) ||
find(board, word, start + 1, i, j + 1) ||
find(board, word, start + 1, i + 1, j) ||
find(board, word, start + 1, i, j - 1);
board[i][j] = word.charAt(start);
return r;
}
}
10-24