用 Go 剑指 Offer 12. 矩阵中的路径 (DFS + 回溯)

这篇具有很好参考价值的文章主要介绍了用 Go 剑指 Offer 12. 矩阵中的路径 (DFS + 回溯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

 

例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。

 用 Go 剑指 Offer 12. 矩阵中的路径 (DFS + 回溯)

 

 

 

示例 1:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true
示例 2:

输入:board = [["a","b"],["c","d"]], word = "abcd"
输出:false
 

提示:

m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board 和 word 仅由大小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

dfs + 回溯 解法


func exist(board [][]byte, word string) bool {
   wordb := []byte(word) // 转化一下 string 方便遍历
    rows := len(board)
    cols := len(board[0])

    for i := 0; i < rows; i++ {
        for j := 0; j < cols; j++ {
            if(dfs(board, wordb, i, j, 0)) { // 调用 dfs 函数
                return true
            }
        }
    }
    return false
}

func dfs(board [][]byte, wordb []byte, i int, j int, k int) bool {
    rows := len(board)
    cols := len(board[0])
//先考虑 false 情况:越界、不相等、重复
if i >= rows || i < 0 || j >= cols || j < 0 || board[i][j] != wordb[k] { return false }
// 遍历完成返回true
if k == len(wordb) - 1 { return true } //归零标记已遍历 byte 类型的0值为 0x0 board[i][j] = 0x0

//四个方向遍历 res := dfs(board, wordb, i + 1, j, k + 1) || dfs(board, wordb, i - 1, j , k + 1) || dfs(board, wordb, i, j + 1, k + 1) || dfs(board, wordb, i, j - 1, k + 1) board[i][j] = wordb[k] return res }

 文章来源地址https://www.toymoban.com/news/detail-409695.html

到了这里,关于用 Go 剑指 Offer 12. 矩阵中的路径 (DFS + 回溯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 剑指 Offer 12 矩阵中的路径

    题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重

    2024年02月09日
    浏览(56)
  • 剑指offer12.矩阵中的路径

     太难了,想了一会儿没有头绪就直接看了题解。 题解用的是回溯算法,check(i,j,k)表示从board[i][j]位置开始能否搜索到word第k个字符后面的字串,能搜索到返回true否则返回false。如果board[i][j] != word[k] 返回false。如果相等且是最后一个字符返回true,如果相等但不是最后一个字符

    2024年02月13日
    浏览(40)
  • 剑指Offer12.矩阵中的路径 C++

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

    2024年02月14日
    浏览(36)
  • (搜索) 剑指 Offer 12. 矩阵中的路径 ——【Leetcode每日一题】

    难度:中等 给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许

    2024年02月12日
    浏览(42)
  • 剑指 Offer 12. 矩阵中的路径 / LeetCode 79. 单词搜索(深度优先搜索)

    链接:剑指 Offer 12. 矩阵中的路径;LeetCode 79. 单词搜索 难度:中等 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相

    2024年02月02日
    浏览(42)
  • 剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

    //写的有点问题,暂时想不到怎么改,先放着,通过用例71/83 卡住的是abcd 但是改了又有问题 无语 看了 答案 都写不对 在类成员里面定义了row和col 就不要重复定义了 不然不知道为什么就开始发疯 先贴出蠢货写出来的东西 审题也审不明白 机器人只能上下左右走 不能一行一行

    2024年02月15日
    浏览(38)
  • 剑指 Offer !!13. 机器人的运动范围(回溯算法)

    剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能

    2024年02月11日
    浏览(40)
  • 【leetcode刷题之路】剑指Offer(3)——搜索与回溯算法

    7 搜索与回溯算法 7.1 【BFS】剑指 Offer 32 - I - 从上到下打印二叉树 https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/   这里借助队列来实现广度优先遍历,由于需要访问每一层的节点,而且这一层访问才可以访问下一层,所以可以考虑队列的先进先出,先把每一层的节

    2024年02月13日
    浏览(59)
  • 剑指offer(C++)-JZ13:机器人的运动范围(算法-回溯)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,

    2024年02月12日
    浏览(47)
  • JZ12 矩阵中的路径

    剑指Offer编程链接:JZ12 题目描述: 思路:递归+回溯的方法,总结一下什么情况需要使用递归: 递归在解决问题时,通常涉及以下情况: 问题可被分解为较小的相似子问题。 子问题与原问题具有相同的结构,只是规模更小。 每个子问题的解可以通过递归调用来获得。 存在

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包