2023.10.16

本题使用回溯法解决,回溯开头先判断i、j是否越界 and 字符是否不匹配。 是的话则直接返回false。 否则,开始回溯判断,后面的字符是否都相等,为了防止矩阵的字符重复使用,回溯前,需要将原来的字符用'#'代替,回溯完再换回来。 java代码如下:
java
class Solution {
private boolean backtrating(char[][] board,char[] word,int i,int j,int k){
if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != word[k]) return false;//越界或者字母不匹配
if(k == word.length-1) return true;
//两字母匹配 开始回溯
char temp = board[i][j];
board[i][j] = '#';
boolean ans = backtrating(board,word,i+1,j,k+1) || backtrating(board,word,i-1,j,k+1) ||
backtrating(board,word,i,j+1,k+1) || backtrating(board,word,i,j-1,k+1);
board[i][j] = temp;
return ans;
}
public boolean exist(char[][] board, String word) {
char[] words = word.toCharArray();
for(int i=0; i<board.length; i++){
for(int j=0; j<board[0].length; j++){
if(backtrating(board,words,i,j,0)) return true;
}
}
return false;
}
}