- 这道题主要使用了回溯的方法,遍历了整个数组,
class Solution {
char[][] board;
String word;
int xlen;
int ylen;
public boolean exist(char[][] board, String word) {
if(word==null||word.length()==0)return false;
this.word=word;
this.board=board;
if(board.length==0){
return false;
}
this.xlen=board.length;
this.ylen=board[0].length;
boolean[][] judge=new boolean[board.length][board[0].length];
for(int i=0;i<xlen;i++){
for(int j=0;j<ylen;j++){
if(helper(judge,i,j,0)){
return true;
}
}
}
return false;
}
public boolean helper(boolean[][] judge,int x,int y,int len){
if(word.length()==len){
return true;
}
if(x<0||x>=xlen){
return false;
}
if(y<0||y>=ylen){
return false;
}
if(judge[x][y]){
return false;
}
if(board[x][y]==word.charAt(len)){
judge[x][y]=true;
if(helper(judge,x,y-1,len+1)){
return true;
}
if(helper(judge,x,y+1,len+1)){
return true;
}
if(helper(judge,x-1,y,len+1)){
return true;
}
if(helper(judge,x+1,y,len+1)){
return true;
}
judge[x][y]=false;
return false;
}else{
return false;
}
}
}