case1: 使用dfs思想,时间复杂度为O(N*3^k)(N为数组中的元素个数,K为字符串的长度)
class Solution {
public boolean dfs(char[][]board,int x,int y,String word,int start,boolean[][]visited){
//终止条件
if(start==word.length()) return true;
if(x<0||x>=board.length||y<0||y>=board[0].length||visited[x][y]||board[x][y]!=word.charAt(start)) return false;
visited[x][y] = true;
if(dfs(board,x-1,y,word,start+1,visited)||dfs(board,x+1,y,word,start+1,visited)||dfs(board,x,y-1,word,start+1,visited)||dfs(board,x,y+1,word,start+1,visited)){
return true;
}
visited[x][y] = false;
return false;
}
public boolean exist(char[][] board, String word) {
int rows = board.length;
if(rows==0) return (word.length()==0)?true:false;
int cols = board[0].length;
boolean[][]visited = new boolean[board.length][board[0].length];
//分别以表盘中的每一个点作为dfs的起点进行回溯判断
for(int x=0;x<rows;x++){
for(int y =0;y<cols;y++){
if(dfs(board,x,y,word,0,visited)){
return true;
}
}
}
return false;
}
}