79. 單詞搜索
問題描述:
給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。
題目鏈接:https://leetcode-cn.com/problems/word-search/
示例1
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
給定 word = “ABCCED”, 返回 true.
給定 word = “SEE”, 返回 true.
給定 word = “ABCB”, 返回 false.
思路:
直接用遞歸+深度優先搜索,檢索路徑
完整代碼:
class Solution {
public boolean exist(char[][] board, String word) {
char c[] = word.toCharArray();
for (int i = 0;i < board.length; i++) {
for (int j = 0;j < board[i].length; j++) {
if (bfs(board , i,j,c,0))
return true;
}
}
return false;
}
public boolean bfs(char[][] board , int x,int y,char c[],int k) {
if (board.length <= x || x < 0 || board[0].length <= y || y < 0 || board[x][y] != c[k])
return false;
if (k == c.length - 1)
return true;
char tmp = board[x][y];
board[x][y] = '/';
boolean res = bfs(board , x+1 , y , c,k+1) || bfs(board , x , y +1, c,k+1)||
bfs(board , x-1 , y , c,k+1) || bfs(board , x , y-1 , c,k+1);
board[x][y] = tmp;
return res;
}
}