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 }