79. Word Search

23次阅读

共计 1273 个字符,预计需要花费 4 分钟才能阅读完成。

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.
Example:
board =
[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]

Given word = “ABCCED”, return true.Given word = “SEE”, return true.Given word = “ABCB”, return false.
难度:medium
题目:给定 2 维格子和一单词,在格子中搜索该单词是否存在。
思路:递归四个方向。Runtime: 8 ms, faster than 84.35% of Java online submissions for Word Search.Memory Usage: 39 MB, less than 9.32% of Java online submissions for Word Search.
class Solution {
public boolean exist(char[][] board, String word) {
int m = board.length;
int n = board[0].length;
boolean[][] visited = new boolean[m][n];

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (exist(board, i, j, visited, word, 0)) {
return true;
}
}
}

return false;
}

private boolean exist(char[][] board, int i, int j, boolean[][] visited, String word, int idx) {
if (i < 0 || i >= board.length
|| j < 0 || j >= board[i].length
|| visited[i][j]
|| word.charAt(idx) != board[i][j]) {
return false;
}

if (idx == word.length() – 1) {
return true;
}

boolean flg = false;
visited[i][j] = true;
flg = flg || exist(board, i – 1, j, visited, word, idx + 1);
flg = flg || exist(board, i + 1, j, visited, word, idx + 1);
flg = flg || exist(board, i, j – 1, visited, word, idx + 1);
flg = flg || exist(board, i, j + 1, visited, word, idx + 1);
visited[i][j] = false;

return flg;
}
}

正文完
 0