首页 > 其他分享 >(DFS + 剪枝)剑指 Offer 12. 矩阵中的路径

(DFS + 剪枝)剑指 Offer 12. 矩阵中的路径

时间:2023-05-06 10:57:38浏览次数:37  
标签:剪枝 12 word Offer 字母 单元格 相邻 board

题目描述:

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

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。

同一个单元格内的字母不允许被重复使用。

 

 

 

 

 

 

 

 

class Solution{
    public boolean exist(char board[][],String word){
        char words[] = word.toCharArray();
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[0].length;j++){
                if(dfs(board,words,i,j,0)) return true;
            }
        }
        return false;
    }
    boolean dfs(char board[][],char word[],int i,int j,int k){
        //返回 falsefalse : (1) 行或列索引越界 或 (2) 当前矩阵元素与目标字符不同
        if(i>=board.length||i<0||j>=board[0].length||j<0||board[i][j]!=word[k]) return false;
        //返回 truetrue : k = len(word) - 1 ,即字符串 word 已全部匹配
        if(k==word.length-1) return true;
        //标记当前矩阵元素代表此元素已访问过,防止之后搜索时重复访问
        board[i][j]='\0';
        //搜索下一单元格: 朝当前元素的 上、下、左、右 四个方向开启下层递归,
        // 使用 或 连接 ,并记录结果至 res 。
        boolean res = dfs(board,word,i+1,j,k+1)||dfs(board,word,i-1,j,k+1)||
                dfs(board,word,i,j+1,k+1)||dfs(board,word,i,j-1,k+1);
        //还原当前矩阵元素: 将 board[i][j] 元素还原至初始值,即 word[k] 。
        board[i][j]=word[k];
        //返回布尔量 res ,代表是否搜索到目标字符串
        return res;
    }
}

 

标签:剪枝,12,word,Offer,字母,单元格,相邻,board
From: https://www.cnblogs.com/zhz123567/p/17376570.html

相关文章

  • DX12 实现 模板——物体轮廓
    前言本篇将展示如何运用深度模板缓冲区来实现游戏中的物体轮廓效果源代码model_outline基础知识模板测试过程//compare_func:定义的比较函数。对两个参数进行比较//StencilRef:模板参考值//StencilReadMask:位于D3D12_DEPTH_STENCIL_DESC//Value:正在接受模板测试的值if......
  • AcWing 1209. 带分数
    1-暴力解法思考1:暴力列举出1~9的全排列,之后再将这些数字按照一定规则相加,最后将结果与n比较。全排列好写,但相加的规则不好写,而且太暴力了,估计会超时。/*AcWing1209.带分数00.最暴力的写法1.枚举全排列2.枚举位数(枚举a和b,可算出c)3.直接算出n,判断等......
  • CF1260E Tournament 题解
    妙妙题,但是感觉评不到紫。题目链接。题意luogu题意。有\(n\)个人,贿赂第\(i\)个人的代价为\(a_i\)。这些人中,贿赂代价为\(-1\)的是你的朋友。现在,你可以两两配对,使得编号小的被淘汰,但是,如果你贿赂了编号大的,那么编号大的被淘汰,而编号小的留下。问:使得你朋友夺得冠军的......
  • DX12 实现 天空盒
    前言本篇将展示如何使用DX12实现天空盒源代码cubemap创建dds立方体贴图微软官方提供了一个命令行工具Texassemble,该工具可以将输入的几个图片转换为GPU可识别的DDS贴图,如立方体贴图语法texassemble<command>[-r][-flist<filename>][-wwidth][-hheight][-f......
  • 【剑指 Offer】 05. 替换空格
    【题目】请实现一个函数,把字符串s中的每个空格替换成"%20"。 示例1:输入:s="Wearehappy."输出:"We%20are%20happy." 限制:0<=s的长度<=10000来源:力扣(LeetCode)链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof【思路】用StringBuilder,遍历数组,遇到空格就追加%20......
  • 商业研究(12):下厨房,美食菜谱分享社区及新型电商,唯有美食与爱不可辜负
     下厨房,2014年就注意到了这个产品,网站做得简洁,有价值。作为C端用户,很喜欢这样的网站。    下厨房是一个美食菜谱分享社区及新型电商平台,提供有版权的实用菜谱做法与饮食知识,为厨师和美食爱好者打造一个记录、分享的平台。    网站的主要用户,是对美食感兴趣的消费者,尤其......
  • stm32 cubeide ST7920 12864点阵屏 U8G2移植
    准备工作【通用-移植u8g2准备工作】在cubeide中移植u8g2到STM32的准备工作源码获取和文件处理-不打鱼光晒网-博客园(cnblogs.com) 7920很老了,spi只能接受2.5M的时钟,实际上2M就大概率花屏了,使用硬件spi的话,由于分频系数选择的问题,配置为1M就行了,不然花屏7920的穿行模式仅......
  • 20201230张国强实验三
    免杀原理1.基础问题回答杀软是如何检测出恶意代码的?基于特征码的静态扫描技术在文件中寻找特定的十六进制字符串,如果找到,就可判定文件感染了某种病毒。启发式杀毒技术病毒要达到感染和破坏的目的,通常的行为都会有一定的行为和特征,所以可以通过分析相关的病毒指令,判......
  • 一个stm23移植u8g2驱动iic屏SSD1306方案12864的左边竖着两列没有显示的奇怪问题
    初始化后画一个方框u8g2_DrawLine(&u8g2,0,0,127,0);u8g2_DrawLine(&u8g2,1,0,1,63);//左边框u8g2_DrawLine(&u8g2,0,63,127,63);u8g2_DrawLine(&u8g2,127,0,127,63);左边框地址为0不显示,设置为1还是不显示设置为2可以看到竖线了中景园......
  • 动态规划:剑指 Offer 10- I. 斐波那契数列
    题目描述: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0)=0,F(1)=1F(N)=F(N-1)+F(N-2),其中N>1.斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模1e9+7(10000......