leetcode79 单词搜索
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]给定 word = “ABCCED”, 返回 true 给定 word = “SEE”, 返回 true 给定 word = “ABCB”,
返回 false
解读:标准的DFS题目;这里我们可以考虑用visited数组保存是否访问过;但是这里我们可以直接改变数组元素;
public boolean exist(char[][] board, String word) {
char str[]=word.toCharArray();
int start=0;
int m=board.length;int n=board[0].length;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(dfs(board,i,j,str,0)){
return true;
}
}
}
return false;
}
public boolean dfs(char[][]board,int i,int j,char[]str,int start){
if(start==str.length) return true;
int m=board.length;int n=board[0].length;
if(i<0||i>=m||j<0||j>=n){
return false;
}
if(board[i][j]!=str[start]){
return false;
}
board[i][j]^=256;
boolean exist=dfs(board,i+1,j,str,start+1)||dfs(board,i-1,j,str,start+1)||
dfs(board,i,j+1,str,start+1)||
dfs(board,i,j-1,str,start+1);
board[i][j]^=256;
return exist;
}