题目链接:https://leetcode.com/problems/word-search/
解题思路:
这个题目和剑指offer上的路径问题是一样的,今天再次复习一下写法。
1 class Solution { 2 public boolean exist(char[][] board, String word) { 3 4 int row = board.length; 5 int column = board[0].length; 6 7 char [] str = word.toCharArray(); 8 9 boolean [][]flag = new boolean[row][column]; 10 11 for(int i=0;i<row;i++) 12 { 13 for(int j=0;j<column;j++) 14 { 15 if(judge(board,i,j,row,column,flag,str,0))////循环遍历二维数组,找到起点等于str第一个元素的值,再递归判断四周是否有符合条件的----回溯法 16 return true; 17 } 18 } 19 return false; 20 21 } 22 23 public boolean judge(char[][] board,int i,int j,int row,int column,boolean [][]flag,char[] str,int k) 24 { 25 if(i<0 || j<0 || i>=row || j>=column || board[i][j] != str[k] || flag[i][j] == true) 26 return false; 27 ////若k已经到达str末尾了,说明之前的都已经匹配成功了,直接返回true即可 28 if(k==str.length-1) 29 return true; 30 ////要走的第一个位置置为true,表示已经走过了 31 flag[i][j] = true; 32 33 ////回溯,递归寻找,每次找到了就给k加一,找不到,还原 34 if(judge(board,i+1,j,row,column,flag,str,k+1)|| 35 judge(board,i,j+1,row,column,flag,str,k+1)|| 36 judge(board,i-1,j,row,column,flag,str,k+1)|| 37 judge(board,i,j-1,row,column,flag,str,k+1)) 38 { 39 return true; 40 } 41 ////走到这,说明这一条路不通,还原,再试其他的路径 42 flag[i][j] = false; 43 return false; 44 45 } 46 }