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

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

时间:2023-07-12 14:01:30浏览次数:46  
标签:12 word idx Offer dfs board return false LeetCode

题目链接: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

相关文章

  • HHHOJ #1238. 「NOIP 2023 模拟赛 20230712 D」但战斗还未结束 思考--zhengjun
    赛时想写60pts,结果cxr似乎少算了一点空间,导致我一直没把空间卡过去QWQ。当时不会dfs求拓扑序,这里讲一下。枚举所有非访问过的点依次dfs,每次进行下列操作:找出\(v\)的一个未访问过的入点\(u\),调用dfs(u);找不到\(u\)的时候,把\(v\)加入拓扑序列中。代码#inc......
  • 123
    之前由于安装Dolby音效的软件,导致无法开机解决办法:1.安全启动开机按F8,选择“安全启动”,进入到系统2.删除程序如果软件和驱动可以直接卸载就卸载,不能卸载就用文件夹在C盘搜索相关文件名,然后删除所有的文件,如果无权删除可以右击使用腾讯电脑管家删除。如果没有安装电脑管......
  • LeetCode 234. 回文链表
    classSolution{public:ListNode*reverse(ListNode*head)//翻转以head为头节点的链表{if(!head||!head->next)returnhead;autoa=head,b=head->next;while(b){autoc=b->next;b->next=a;......
  • 7.12日
    一、学Java的容器部分并完成五道练习题,之后就可以开始学技术内容了。二、cf刷题,最低170道,然后模拟参与一场竞赛。在这里恭喜一下自己,第一次做出四道题,上大分。 #include<bits/stdc++.h>#defineintlonglong#definexfirst#defineysecond#defineendl'\n'#define......
  • 成语积累 20230712
    惨淡经营:惨淡:苦费心思;经营:筹划。原指煞费苦心地从事绘画或诗文创作,今泛指在困难的境况中艰苦的从事某种事业。作谓语,定语。不吐不茹:不吐刚,不茹柔:不吐坚硬的东西,不吞柔软的东西,即吞坚硬的东西。形容人正直不阿,不欺软怕硬。作谓语,定语。近义:刚正不阿。反义:柔茹刚吐。例句:我们就是......
  • Java入门12(多线程)
    多线程线程的实现方式继承Thread类:一旦继承了Thread类,就不能再继承其他类了,可拓展性差实现Runnable接口:仍然可以继承其他类,可拓展性较好使用线程池继承Thread类​ 不能通过线程对象调用run()方法,需要通过t1.start()方法,使线程进入到就绪状态,只要进入到就绪状态......
  • [TM4] TM4C123G Keil5 新建工程指南
    [TM4]TM4C123GKeil5新建工程指南keil新建工程,选择TM4C123GH6PM芯片,然后在CMSIS勾选CORE,DEVICE勾选Startup(如图),来到新工程界面在SourceGroup1里添加main.c,将SourceGroup重命名为user在Target1目录下添加driverlib文件夹、hardware文件夹、sys文件夹、inc文件夹,utils文件夹以......
  • LeetCode -- 918. 环形子数组的最大和
     遇到环形问题一般有两种考虑方法:1.破环成链2.分为数组中间部分和数组两边部分分别考虑本题采用第二种考虑方法,将原数组分为中间部分和两边部分分别考虑。中间部分即为子数组最大和,两边部分计总和减去中间部分最小和。classSolution{public:intma......
  • LeetCode 热题 100 之 128. 最长连续序列
    题目描述给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums......
  • 20230712 讲题
    CF1364DEhab'sLastCorollary简单题。特判掉\(m=n-1\)的情况,此时一定能找到一个大小为\(\left\lceil\frac{k}{2}\right\rceil\)的独立集,二分图染色即可。否则,我们建出dfstree,找到一条连接的两个端点深度之差最小的返祖边,设它为\((u,v)\),且\(dep_u>dep_v\)。......