class Solution {
final static int[][] dires = {{0,1},{0,-1},{1,0},{-1,0}};
public boolean exist(char[][] board, String word) {
if(word == null || word.length() == 0)
return true;
if(board == null || board.length == 0 || board[0].length == 0)
return false;
int m = board.length;
int n = board[0].length;
boolean[][] index = new boolean[m][n];
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
if(dfs(0,word,board,index,i,j)){
return true;
}
}
}
return false;
}
public boolean dfs(int len,String word,char[][] board,boolean[][] index,int m,int n){
if(len == word.length())
return true;
if(m<0 || m>= board.length || n<0 || n>= board[0].length || board[m][n]!=word.charAt(len) || index[m][n])
return false;
index[m][n] = true;
for(int[] a:dires){
if(dfs(len+1,word,board,index,m+a[0],n+a[1])){
return true;
} //不需要else return false 做了就不满足一次就false了,后续不会进行
}
index[m][n] = false;
return false;
}
}