79. Word Search

题目链接: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 }
原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10969832.html