dfs搜索,需要用到marked[][]标志,来解决已走过的路径。12ms
public class Solution {
public boolean exist(char[][] board, String word) {
int rows = board.length;
int cols = board[0].length;
int[][] marked = new int[rows][cols];
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++){
if(dfs(board,i,j,0,word,marked)){
return true;
}
}
return false;
}
private boolean dfs(char[][]board,int i,int j,int index,String targetWord,int[][]marked){
int rows = board.length;
int cols = board[0].length;
if(index==targetWord.length()){
return true;
}
if(i>=rows||i<0||j>=cols||j<0||marked[i][j]==1)
return false;
marked[i][j] = 1;
if(board[i][j]==targetWord.charAt(index)){
if(dfs(board,i+1,j,index+1,targetWord,marked)||dfs(board,i,j+1,index+1,targetWord,marked)||dfs(board,i-1,j,index+1,targetWord,marked)||dfs(board,i,j-1,index+1,targetWord,marked))
return true;
else{
marked[i][j]=0;
return false;
}
}else{
marked[i][j]=0;
return false;
}
}
}