链接
题目.
难度:
middle
解答:
这是一个典型的深度优先查找算法
package main
import "fmt"
func deepSearch(travelled map[int]bool, board [][]byte, i, j int, word string) bool {
if len(word) == 0 {
return true
}
if i >= len(board) || i < 0 {
return false
}
if j >= len(board[0]) || j < 0 {
return false
}
pos := i*len(board[0]) + j
if travelled[pos] {
return false
}
if board[i][j] != word[0] {
return false
}
travelled[pos] = true
fmt.Println("checking ", i, j, word)
res := deepSearch(travelled, board, i+1, j, word[1:]) ||
deepSearch(travelled, board, i-1, j, word[1:]) ||
deepSearch(travelled, board, i, j+1, word[1:]) ||
deepSearch(travelled, board, i, j-1, word[1:])
travelled[pos] = false
return res
}
func exist(board [][]byte, word string) bool {
if len(word) == 0 {
return true
}
if len(board) == 0 {
return false
}
travelled := make(map[int]bool, len(board)*len(board[0]))
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[i]); j++ {
if deepSearch(travelled, board, i, j, word) {
return true
}
}
}
return false
}
func main() {
board := [][]byte{
{'A', 'B', 'C', 'E'},
{'S', 'F', 'E', 'S'},
{'A', 'D', 'E', 'E'},
}
fmt.Println(exist(board, "ABCESEEEFS"))
}
复杂度分析
time
O(n*n)
space
O(n)
执行结果
执行用时 :
12 ms
, 在所有 Go 提交中击败了
30.54%
的用户
内存消耗 :
5.1 MB
, 在所有 Go 提交中击败了
21.43%
的用户
来源:CSDN
作者:Ethan3014
链接:https://blog.csdn.net/weixin_45594127/article/details/103832339