79. Word Search (Matrix)

运用dfs查找
用substring不太好 可能弄到空的 还是用start记录位置比较好

dfs刚开始先判断条件 判断完再干别的会比较方便

visited 每次用完要变回false 否则有同一个点搜索路径退回的时候,那边就不能被继续搜索了

 

 

 1 class Solution {
 2     static boolean[][] visited;
 3     public boolean exist(char[][] board, String word) {
 4         int n = word.length();
 5         visited = new boolean[board.length][board[0].length];
 6         for(int i = 0; i < board.length; i++) {
 7             for(int j = 0; j < board[0].length; j++) {
 8                 if(board[i][j] == word.charAt(0)) {
 9                     if(dfs(i, j, board, 0, word)) {
10                         return true;
11                     }
12                 }
13             }
14         }
15         return false;
16         
17     }
18     
19     public boolean dfs(int i, int j, char[][] board, int start, String word) {
20         if(word.length() == start ) return true;
21         if(i < 0 || i >= board.length || j<0 || j >= board[0].length || board[i][j] != word.charAt(start) || visited[i][j] ) {
22             return false;
23         }
24         visited[i][j] = true;
25         start++;
26         boolean res = dfs(i+1, j, board, start, word) || dfs(i-1, j, board, start, word)
27                       ||dfs(i, j-1, board, start, word)
28                       ||dfs(i, j+1, board, start, word);
29         visited[i][j] = false; //必要的!!
30         return res;
31         
32     }
33 }

 

posted @ 2018-08-27 10:19  jasoncool1  阅读(126)  评论(0编辑  收藏  举报