给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.
class Solution {
public boolean exist(char[][] board, String word) {
int cur=0;
boolean[][] visits = new boolean[board.length][board[0].length];
for (int i=0; i<board.length; ++i){
for (int j=0; j<board[i].length; ++j){
if (check(board, i, j, cur, word, visits)){
return true;
}
}
}
return false;
}
public boolean check(char[][] board, int row, int col, int cur, String word, boolean[][] visits){
if (cur == word.length()){
return true;
}
boolean hasPath = false;
if (row >=0 && col >= 0 && row < board.length && col < board[0].length && word.charAt(cur) == board[row][col] && !visits[row][col]){
visits[row][col] = true;
//cur++;
hasPath = (check(board, row+1, col, cur+1, word, visits) || check(board, row, col+1, cur+1, word, visits)|| check(board, row-1, col, cur+1, word, visits) || check(board, row, col-1, cur+1, word, visits));
if(!hasPath){
// cur--;
visits[row][col] = false;
}
}
return hasPath;
}
}