题目链接:LeetCode 剑指 Offer 12. 矩阵中的路径
题意:
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
解题思路:
外层以矩阵中每个点作为起始位置进行查找,内层 dfs 查找时进行比较,看能否找全字符串。
代码:
func exist(board [][]byte, word string) bool {
for x := range board {
for y := range board[x] {
if dfs(board, word, x, y, 0) { //以每个点作为起点进行查找,dfs判断能否找到全字符串
return true
}
}
}
return false
}
func dfs(board [][]byte, word string, x, y, idx int) bool { //idx 表示当前已经找到了多少个字符
if len(word) == idx {
return true
}
if x < 0 || x >= len(board) || y < 0 || y >= len(board[0]) || word[idx] != board[x][y] { //越界或者相等,直接返回false
return false
}
// 标记被使用
tmp := board[x][y]
board[x][y] = '0'
defer func() {
board[x][y] = tmp
}()
return dfs(board, word, x+1, y, idx+1) || //向左
dfs(board, word, x-1, y, idx+1) || //向右
dfs(board, word, x, y+1, idx+1) || //向下
dfs(board, word, x, y-1, idx+1) //向上
}
标签:12,word,idx,Offer,dfs,board,return,false,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17547298.html