LeetCode 剑指 Offer 12. 矩阵中的路径

题目链接: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)			//向上
}


posted @ 2023-07-12 13:51  小星code  阅读(21)  评论(0)    收藏  举报