题目:
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/wo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
func exist(board [][]byte, word string) bool {
m, n := len(board), len(board[0])
visited := make([][]bool, m)
for i := 0; i < m; i ++ {
visited[i] = make([]bool, n)
}
for x := 0; x < m; x ++ {
for y := 0; y < n; y ++ {
if search(board, word, 0, visited, m, n, x, y) {
return true
}
}
}
return false
}
func search(board [][]byte, word string, index int, visited [][]bool, m, n, i, j int) bool {
if index == len(word) {
return true
}
if 0 <= i && i < m && 0 <= j && j < n && !visited[i][j]{
if board[i][j] == word[index] {
visited[i][j] = true
r1 := search(board, word, index + 1, visited, m, n, i + 1, j)
r2 := search(board, word, index + 1, visited, m, n, i - 1, j)
r3 := search(board, word, index + 1, visited, m, n, i, j + 1)
r4 := search(board, word, index + 1, visited, m, n, i, j - 1)
visited[i][j] = false
return r1 || r2 || r3 || r4
}
}
return false
}