Word Search leetcode java


題目

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,

word = "ABCB", -> returns false.

 

題解

 這道題分析看,就是一個詞,在一行出現也是true,一列出現也是true,一行往下拐彎也是true,一行往上拐彎也是true,一列往左拐彎也是true,一列往右拐彎也是true。所以是要考慮到所有可能性,基本思路是使用DFS來對一個起點字母上下左右搜索,看是不是含有給定的Word。還要維護一個visited數組,表示從當前這個元素是否已經被訪問過了,過了這一輪visited要回false,因為對於下一個元素,當前這個元素也應該是可以被訪問的。

代碼如下:

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

 Reference:http://blog.csdn.net/yiding_he/article/details/18893621


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM