
本题使用回溯法解决,回溯开头先判断i、j是否越界 and 字符是否不匹配。 是的话则直接返回false。 否则,开始回溯判断,后面的字符是否都相等,为了防止矩阵的字符重复使用,回溯前,需要将原来的字符用‘#’代替,回溯完再换回来。 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
- for(int j=0; j
0].length; j++){ - if(backtrating(board,words,i,j,0)) return true;
- }
- }
- return false;
- }
- }