1) dfs
2) 维护visited 数组,dp类似
3) 关于最后吧visited这一位清回false的解释
ref http://www.cnblogs.com/springfor/p/3883942.html
public class Solution {
public boolean exist(char[][] board, String word) {
// ref: http://www.cnblogs.com/springfor/p/3883942.html
// if(board==null || board.length==0 || board[0].length==0|| word.length()==0) return false;
int row = board.length;
int col = board[0].length;
boolean[][] visited = new boolean[row][col];
for(int i=0; i< row; i++){
for(int j=0; j< col; j++){
if(dfs(board, word, i, j, 0, visited)){
return true;
}else continue;
}
}
return false;
}
public boolean dfs(char[][] bd, String wd, int row, int col, int wdind, boolean[][] visited){
if(wd.length()==wdind) return true;
if(row<0 || col<0 || row>= bd.length || col >= bd[0].length) return false;
if(visited[row][col]) return false;
if(wd.charAt(wdind)!=bd[row][col]) return false;
visited[row][col] = true;
boolean res = dfs(bd,wd,row-1,col,wdind+1,visited) || dfs(bd,wd,row,col-1,wdind+1,visited) ||dfs(bd,wd,row+1,col,wdind+1,visited) || dfs(bd,wd,row,col+1,wdind+1,visited);
visited[row][col] = false; //"过了这一轮visited要回false,因为对于下一个元素,当前这个元素也应该是可以被访问的。"
return res;
}
}