单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
class Solution {
public boolean exist(char[][] board, String word) {
boolean result=false;
int[][] visited = new int[board.length][board[0].length];
char[] a = word.toCharArray();
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
result = existPath(board, visited, i, j, 0, a);
if(result){
break;
}
}
if(result){
break;
}
}
return result;
}
public boolean existPath(char[][] board, int[][] visited, int i, int j, int index, char[] arrayLength){
boolean result = false;
if(index==arrayLength.length){
return true;
}
if(i<0||j<0||i>=board.length||j>=board[0].length||visited[i][j]==1){
return false;
}
if(board[i][j]==arrayLength[index]){
visited[i][j]=1;
result = existPath(board, visited, i+1, j, index+1, arrayLength)||existPath(board, visited, i-1, j, index+1, arrayLength)||existPath(board, visited, i, j+1, index+1, arrayLength)||existPath(board, visited, i, j-1, index+1, arrayLength);
visited[i][j]=0;
}
return result;
}
}