代码拉取完成,页面将自动刷新
/*
* @lc app=leetcode.cn id=79 lang=java
*
* [79] 单词搜索
*
* https://leetcode-cn.com/problems/word-search/description/
*
* algorithms
* Medium (41.69%)
* Likes: 471
* Dislikes: 0
* Total Accepted: 68.9K
* Total Submissions: 163.9K
* Testcase Example: '[["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]]\n"ABCCED"'
*
* 给定一个二维网格和一个单词,找出该单词是否存在于网格中。
*
* 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
*
*
*
* 示例:
*
* board =
* [
* ['A','B','C','E'],
* ['S','F','C','S'],
* ['A','D','E','E']
* ]
*
* 给定 word = "ABCCED", 返回 true
* 给定 word = "SEE", 返回 true
* 给定 word = "ABCB", 返回 false
*
*
*
* 提示:
*
*
* board 和 word 中只包含大写和小写英文字母。
* 1 <= board.length <= 200
* 1 <= board[i].length <= 200
* 1 <= word.length <= 10^3
*
*
*/
// @lc code=start
class Solution {
public boolean exist(char[][] board, String word) {
int h = board.length, w = board[0].length;
boolean[][] visited = new boolean[h][w];
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
boolean flag = dfs(board, word, visited, i, j, 0);
if (flag) {
return true;
}
}
}
return false;
}
public boolean dfs(char[][] board, String word, boolean[][] visited, int i, int j, int k) {
if (board[i][j] != word.charAt(k)) {
return false;
} else if (k == word.length() - 1) {
return true;
}
int[][] directions = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
visited[i][j] = true;
boolean result = false;
for (int[] dir : directions) {
int newI = i + dir[0], newJ = j + dir[1];
if (newI >= 0 && newI < board.length && newJ >= 0 && newJ < board[0].length) {
if (!visited[newI][newJ]) {
boolean flag = dfs(board, word, visited, newI, newJ, k + 1);
if (flag) {
result = true;
break;
}
}
}
}
visited[i][j] = false;
return result;
}
}
// @lc code=end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。