题目
思路(Java语言描述)
经典DFS模板,逆时针遍历即可
class Solution {
int rowLen;
int colLen;
public boolean exist(char[][] board, String word) {
rowLen = board.length;
colLen = board[0].length;
for(int i = 0;i<rowLen;i++){
for(int j = 0;j<colLen;j++){
boolean flag = dfs(i,j,board,word,0);
if(flag){
return true;
}
}
}
return false;
}
public boolean dfs(int i,int j,char[][] board,String word,int dx){
if(dx == word.length()){
return true;
}
if(!checkBoard(i,j) || board[i][j]=='#' || board[i][j] != word.charAt(dx)){
return false;
}
char tmp = board[i][j];
board[i][j]='#';
boolean f1 = dfs(i-1,j,board,word,dx+1);
boolean f2 = dfs(i,j+1,board,word,dx+1);
boolean f3 = dfs(i+1,j,board,word,dx+1);
boolean f4 = dfs(i,j-1,board,word,dx+1);
if(f1 || f2 || f3 || f4){
return true;
}
board[i][j] = tmp;
return false;
}
public boolean checkBoard(int i,int j){
if(i>=rowLen || i<0) return false;
if(j>=colLen || j<0) return false;
return true;
}
}
总结
这题在第一次提交的时候解答错误,找了一会发现回溯的时候忘记还原,还原后才通过,在这里做个总结
原创不易,请勿转载(
本不富裕的访问量雪上加霜)
博主首页:https://blog.csdn.net/weixin_43967679
如果文章对你有帮助,记得关注点赞收藏❤😊