题目描述
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例: board = [ [‘A’,‘B’,‘C’,‘E’], [‘S’,‘F’,‘C’,‘S’], [‘A’,‘D’,‘E’,‘E’] ]
给定 word = “ABCCED”, 返回 true. 给定 word = “SEE”, 返回 true. 给定 word = “ABCB”, 返回 false.
总结
这题只能暴搜,没什么好说的
Sample Code
class Solution {
public boolean exist(char[][] board
, String word
) {
for (int i
= 0; i
< board
.length
; i
++){
for (int j
= 0; j
< board
[0].length
; j
++) {
if (search(board
, word
, i
, j
, 0)) {
return true;
}
}
}
return false;
}
boolean search(char[][] board
, String word
, int i
, int j
, int k
) {
if (k
>= word
.length()) return true;
if (i
< 0 || i
>= board
.length
|| j
< 0 || j
>= board
[0].length
|| board
[i
][j
] != word
.charAt(k
))
return false;
board
[i
][j
] += 256;
boolean result
= search(board
, word
, i
- 1, j
, k
+ 1) || search(board
, word
, i
+ 1, j
, k
+ 1)
|| search(board
, word
, i
, j
- 1, k
+ 1) || search(board
, word
, i
, j
+ 1, k
+ 1);
board
[i
][j
] -= 256;
return result
;
}
}