这道题要注意在结束的时候恢复状态。
class Solution {
public boolean exist(char[][] board, String word) {
// Corner Case
if(board == null || board.length == 0 || board[0] == null || board[0].length == 0){
return false;
}
int rows = board.length, cols = board[0].length;
boolean[][] visited = new boolean[rows][cols];
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
if(backtrack(board, word, i, j, 0, visited)){
return true;
}
}
}
return false;
}
private boolean backtrack(char[][] board, String word, int i, int j, int idx, boolean[][] visited){
int rows = board.length, cols = board[0].length;
// Base case
if(idx == word.length()){
return true;
}
if(i < 0 || i >= rows || j < 0 || j >= cols || visited[i][j] == true){
return false;
}
if(board[i][j] != word.charAt(idx)){
return false;
}
visited[i][j] = true;
boolean res = backtrack(board, word, i - 1, j, idx + 1, visited)
|| backtrack(board, word, i + 1, j, idx + 1, visited)
|| backtrack(board, word, i, j - 1, idx + 1, visited)
|| backtrack(board, word, i, j + 1, idx + 1, visited);
if(res){
return true;
}
visited[i][j] = false;
return false;
}
}