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;
}
}