剑指 Offer 12. 矩阵中的路径
题意
题解
思路:DFS,遍历矩阵寻找入口,步长确定作为成功条件,边界与字符串是否相等作为回溯条件,注意剪枝优化是将相等的位置置为空字符串,避免重复进入,结束后需要重新换回来
- 时间复杂度:O(3^K MN) —— K表示字符串长度,最差情况遍历整个矩阵MN
- 空间复杂度:O(K) —— 递归深度最大为字符串长度K
```go
func exist(board [][]byte, word string) bool {
for i := 0; i < len(board); i++ {
} return false }for j := 0; j <= len(board[0]); j++ {if dfs(i, j, 0, board, word) {return true}}
func dfs(i, j, step int, board [][]byte, word string) bool { if len(word) == step { return true }
if i < 0 || j < 0 || i == len(board) || j == len(board[0]) || board[i][j] != word[step] {
return false
}
board[i][j] = ' '
res := dfs(i+1, j, step+1, board, word) || dfs(i, j+1, step+1, board, word) || dfs(i-1, j, step+1, board, word) || dfs(i, j-1, step+1, board, word)
board[i][j] = word[step]
return res
} ``` 结果:
- 执行用时:4 ms, 在所有 Go 提交中击败了96.63%的用户
- 内存消耗:3.2 MB, 在所有 Go 提交中击败了88.76%的用户
