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

力扣---剑指 Offer 12. 矩阵中的路径

时间:2023-04-02 10:25:07浏览次数:30  
标签:arr 12 return Offer --- length board judge false

给定一个 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 仅由大小写英文字母组成
注意:本题与主站 79 题相同:https://leetcode-cn.com/problems/word-search/

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


 

一般这种题都能用回溯做。

个人感觉回溯最重要的一个是终止判断,另一个是状态恢复。

class Solution {
    public boolean exist(char[][] board, String word) {
        if (board == null || board.length == 0 || board[0].length == 0) {
            return false;
        }
        char[] arr = word.toCharArray();
        boolean[][] judge = new boolean[board.length][board[0].length];
        for (int i = 0; i < board.length; i ++) {
            for (int j = 0; j < board[0].length; j ++) {
                if (board[i][j] == arr[0]) {
                    if (dfs(arr, 0, board, i, j, judge)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    private boolean dfs(char[] arr, int p, char[][] board, int i, int j, boolean[][] judge) {
        if (p == arr.length) {
            return true;
        }
        if (i < 0 || i == board.length) {
            return false;
        }
        if (j < 0 || j == board[0].length) {
            return false;
        }
        if (judge[i][j]) {
            return false;
        }
        if (board[i][j] != arr[p]) {
            return false;
        }
        judge[i][j] = true;
        boolean ans = dfs(arr, p + 1, board, i + 1, j, judge)
                || dfs(arr, p + 1, board, i - 1, j, judge)
                || dfs(arr, p + 1, board, i, j + 1, judge)
                || dfs(arr, p + 1, board, i, j - 1, judge);
        judge[i][j] = false;
        return ans;
    }
}

 

标签:arr,12,return,Offer,---,length,board,judge,false
From: https://www.cnblogs.com/allWu/p/17279988.html

相关文章

  • Tomcat 入门实战(4)--Tomcat 集群 Session 复制
    本文主要介绍在Tomcat集群中如何进行Session复制,文中所使用到的软件版本:Centos7.9.2009、Java1.8.0_321、Tomcat8.5.87。1、快速配置取消conf/server.xml文件中的以下注释来启用集群:<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>使用上述配......
  • java面向对象编程-方法回顾
    方法回顾和加深方法的定义修饰符返回类型方法名:注意规范,见名知意参数列表:参数类型参数名异常抛出:后面讲解  方法的调用静态方法非静态方法形参和实参值传递和引用传递this关键字    ......
  • Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决
    一、前言如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标指针居然变成了繁忙,但是当你将鼠标位置从句柄控件中移到外面的时候,他又会自动恢复......
  • 力扣610(MySQL)-判断三角形(简单)
    题目:表: Triangle写一个SQL查询,每三个线段报告它们是否可以形成一个三角形。以 任意顺序 返回结果表。查询结果格式如下所示。示例1: 解题思路:判断是否形成三角形的准则是:两边之和大于第三边。方法一:casewhen1#WriteyourMySQLquerystatementbelow2select......
  • 洛谷 P8762 [蓝桥杯 2021 国 ABC] 123 题解
    为什么可以使用前缀和,这里提供解释:初读题目,我们发现这个数列很迷惑,似乎不能使用数学方法来解。\[1,1,2,1,2,3,1,2,3,4,\cdots\]但是,我们可以想到数形结合的方式,我们将数列看作一个三角形,于是他变成了:\[1\]\[1,2\]\[1,2,3\]\[1,2,3,4\]\[\cdots\cdots\]于是本题变得好思......
  • 生活中的常识与原理001-天文-基础
    相关英文词汇:latitude/ˈlætɪtjuːd/,纬度,记忆时可以与ladder相关联,因为纬度是标识南北的线,就像梯子的格子一样。赤道为0度,北极为90度。注意与高度altitude相区别。longitude/ˈlɔndʒɪtjuːd/,经度。从南到北,与赤道垂直。0度经线贯穿英国格林尼治天文台。经度和纬度可以标......
  • 洛谷P1217 [USACO1.5]回文质数 Prime Palindromes
    #include<bits/stdc++.h>usingnamespacestd;inta,b;boolzs(intx){if(x%2>0){for(inti=3;i<x;i+=2)if(x%i==0)returnfalse;returntrue;}elsereturnfalse;}boolhws(intx......
  • 力扣608(MySQL)-树节点(中等)
    题目:给定一个表 tree,id 是树节点的编号, p_id 是它父节点的 id。 树中每个节点属于以下三种类型之一:叶子:如果这个节点没有任何孩子节点。根:如果这个节点是整棵树的根,即没有父节点。内部节点:如果这个节点既不是叶子节点也不是根节点。写一个查询语句,输出所有节点的编号......
  • [oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选
    中文编码GB2312回忆上次内容上次回顾了日韩各有编码格式日本有假名五十音一字节可以勉强放下 有日本汉字字符数量超过20000+  韩国有谚文数量超过500一个字节放不下 有朝鲜汉字字符数量超过20000+......
  • springboot-自己开发start
    步骤命名规范第三方在建立自己的Starter的时候命名规则统一用xxx-spring-boot-starter,官方提供的Starter统一命名方式为spring-boot-starter-xxx。步骤新建一个Maven项目,在pom.xml文件中定义好所需依赖;新建配置类,写好配置项和默认值,使用@ConfigurationProperties指明......