给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
func exist(board [][]byte, word string) bool {
m := len(board)
n := len(board[0])
var def func(index1, index2 int, index int) bool
def = func(index1, index2 int, index int) bool {
if index1 < 0 || index2 < 0 || index1 >= m || index2 >= n || board[index1][index2] != word[index] {
return false
}
if index == len(word)-1 {
return true
}
//避免重复匹配同一位置的字符
temp := board[index1][index2]
board[index1][index2] = 0
res := def(index1+1, index2, index+1) || def(index1, index2+1, index+1) || def(index1-1, index2, index+1) || def(index1, index2-1, index+1)
board[index1][index2] = temp
return res
}
//遍历寻找启起始位置
for i := 0; i < m; i++ {
for j := 0; j < n; j++ {
if def(i, j, 0) {
return true
}
}
}
return false
}