首页 > 其他分享 >用 Go 剑指 Offer 12. 矩阵中的路径

用 Go 剑指 Offer 12. 矩阵中的路径

时间:2023-04-10 17:02:57浏览次数:35  
标签:12 word wordb Offer dfs len board Go return

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

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

 

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

 

 

 

 

示例 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)
    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)) {
                return true
            }
        }
    }
    return false
}

func dfs(board [][]byte, wordb []byte, i int, j int, k int) bool {
    rows := len(board)
    cols := len(board[0])
    if i >= rows || i < 0 || j >= cols || j < 0 || board[i][j] != wordb[k] {
        return false
    }
    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
}

 

标签:12,word,wordb,Offer,dfs,len,board,Go,return
From: https://www.cnblogs.com/slowlydance2me/p/17303475.html

相关文章

  • GORM自定义类型
    GORM自定义类型官网地址官方也有一个用来收集自定义的类型的仓库:https://github.com/go-gorm/datatypes场景时间类型初始的时间类型只有time.time类型,而我们习惯输入和展示的结构是形如2023-04-0812:12:12这种。这种格式需要被程序转化为time.time类型被orm使用,从数据库......
  • 不想做架构师的Gopher不是好程序员
    最近我们在组队学习《手把手带你写一个web框架》,强制PUSH,坚持每天学习打卡,不完成惩罚发红包的那种。你别说,效果还真挺好。昨天学到了架构部分,很受启发,光学不写假把式。(还是得坚持输出哇)我站在大佬的肩膀上输出一篇总结文章出来,希望对大家有帮助:概述所谓架构,与一线开发最大......
  • 用 Go 剑指 offer:面试题61. 扑克牌中的顺子
    从若干副扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为0,可以看成任意数字。A不能视为14。 示例 1:输入:[1,2,3,4,5]输出:True 示例 2:输入:[0,0,1,2,5]输出:True 限制:数组长度为5 数组的......
  • js:四个方向无跳动/无缝滚动,支持图片/html串,支持延时缓慢翻页,ff/ie测试 -- 2012-1-
    ----------代码----------<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title></title></head><body><divid="gg"><......
  • 1124.表现良好的最长时段
    1124.表现良好的最长时段同类题目题目描述 给你一份工作时间表hours,上面记录着某一位员工每天的工作小时数。我们认为当员工一天中的工作小时数大于8小时的时候,那么这一天就是「劳累的一天」。所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格大于「不劳累的天......
  • 用 Go 剑指 Offer 57. 和为s的两个数字 (双指针)
    输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例1:输入:nums=[2,7,11,15],target=9输出:[2,7]或者[7,2]示例2:输入:nums=[10,26,30,31,47,60],target=40输出:[10,30]或者[30,10] 限......
  • Go 语言函数闭包
    Go语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。以下实例中,我们创建了函数getSequence(),返回另外一个函数。该函数的目的是在闭包中递增i变量,代码如下:实例package mainimport "fmt"func ge......
  • Go语言闭包
    说到Go语言的闭包,不得不说说全局变量和局部变量全局变量的特点:1.常驻内存2.污染全局局部变量的特点:1.不常驻内存2.不污染全局而Go语言的闭包可以做到1.可以让变量常驻内存2.可以让变量不污染全局所以闭包主要是为了避免全局变量的滥用。闭......
  • Django中models模块增删改查
    1django操作数据库1.1创建表和字段fromdjango.dbimportmodelsclassBlog_Model(models.Model):name=models.CharField(db_column='name',max_length=200,blank=True,verbose_name='name')num=models.IntegerField(db_column='num�......
  • 用 Go 剑指 Offer 39. 数组中出现次数超过一半的数字 (摩尔投票)
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 //若不存在多数元素,本题就需要计数并判断示例 1:输入:[1,2,3,2,2,2,5,4,2]输出:2 限制:1<=数组长度<=50000来源:力扣(LeetCode)链......