原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvkwe2/
解法一:
class Solution {
public boolean exist(char[][] board, String word) {
for (int i = 0 ; i < board.length; i++) {
for (int j = 0 ; j < board[i].length; j++) {
if (dfs(board,word.toCharArray(),i,j,0)) {
return true;
}
}
}
return false;
}
private boolean dfs(char[][] board,char[] words,int i, int j, int index) {
if (i < 0 || i >= board.length || j < 0 ||
j >= board[0].length || board[i][j] != words[index] ) {
return false;
}
if (words.length == index+1) {
return true;
}
char tmp = board[i][j];
board[i][j] = '.';
boolean bool = dfs(board,words,i+1,j,index +1)
|| dfs(board,words,i-1,j,index + 1)
|| dfs(board,words,i,j+1,index + 1)
|| dfs(board,words,i,j-1,index + 1)
;
board[i][j] = tmp;
return bool;
}
}
思路:回溯法,我记得之前也有类似的题目,从第一个元素开始,上下左右进行递归,所以递归的时候需要注意边界值的判断,然后在回溯的时候需要把当前的值设置为另一个字符,递归完成之后再将其改回来。