JZ12 矩阵中的路径

剑指Offer编程链接:JZ12

题目描述:
在这里插入图片描述
思路:递归+回溯的方法,总结一下什么情况需要使用递归:

递归在解决问题时,通常涉及以下情况:

  1. 问题可被分解为较小的相似子问题。
  2. 子问题与原问题具有相同的结构,只是规模更小。
  3. 每个子问题的解可以通过递归调用来获得。
  4. 存在基本情况,当问题足够小时可以直接求解。

递归适用于许多问题,如数学运算(如阶乘、斐波那契数列)、树结构遍历、图算法、字符串处理等。然而,使用递归时要注意合适的终止条件和避免出现无限递归。

具体做法:
step 1:优先处理矩阵为空的特殊情况。
step 2:设置flag数组记录某一次路径中矩阵中的位置是否被经过,因此一条路径不能回头。
step 3:遍历矩阵,对每个位置进行递归。
step 4:递归查找的时候,到了矩阵的边界或者是下一个字符与这个位置的字符不匹配,或者节点已经访问过了,或者字符串匹配完成都结束递归。
step 5:访问节点,修改flag数组,向其他四个方向延伸,回溯的时候修改flag数组。

代码:

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param matrix char字符型二维数组 * @param word string字符串 * @return bool布尔型*///i代表数组行,j代表列,matrix代表矩阵,n*m 矩阵,word代表要匹配的字符串,k代表当前第几个字符private boolean dfs(char[][] matrix,int n,int m,int i,int j,String word,int k,boolean[][] flag){//下标越界、字符不匹配、已经遍历过不能重复if(i<0||i>=n||j<0||j>=m||(matrix[i][j]!=word.charAt(k))||(flag[i][j]==true)){return false;}if(k==word.length()-1){return true;}flag[i][j] = true;//该结点四个方向if(dfs(matrix,n,m,i-1,j,word,k+1,flag)||dfs(matrix,n,m,i+1,j,word,k+1,flag)||dfs(matrix,n,m,i,j-1,word,k+1,flag)||dfs(matrix,n,m,i,j+1,word,k+1,flag)){return true;}//此格未被占用flag[i][j] = false;return false;}public boolean hasPath (char[][] matrix, String word) {// write code hereif(matrix.length == 0){return false;}int n = matrix.length;int m = matrix[0].length;boolean[][] flag = new boolean[n][m];for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){if(dfs(matrix,n,m,i,j,word,0,flag)){return true;}}}return false;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java空指针异常

在所有的RuntimeException异常中&#xff0c;Java程序员最熟悉的恐怕就是NullPointerException了。 NullPointerException即空指针异常&#xff0c;俗称NPE。如果一个对象为null&#xff0c;调用其方法或访问其字段就会产生NullPointerException&#xff0c;这个异常通常是由J…

Oracle的学习心得和知识总结(二十九)|Oracle数据库数据库回放功能之论文三翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

【OpenCV入门】第八部分——滤波器

文章结构 图像平滑处理均值滤波器中值滤波器高斯滤波器双边滤波器拉普拉斯高通滤波器 图像平滑处理 图像平滑处理是指在尽量保留原图像信息的情况下&#xff0c;去除掉图像内部的噪声&#xff08;分布不均匀的、高亮度的像素点&#xff09;。而用于图像平滑处理的工具就是滤波…

剑指 Offer 44. 数字序列中某一位的数字(中等)

题目&#xff1a; class Solution { //本题单纯找规律&#xff0c;要注意通过n%digits来判断有几个位数为digits的数 public:int findNthDigit(int n) {long base 9, digits 1; //digits代表位数while(n-base*digits>0){ //该循环是为了确定目标数字所在…

Qt +VTK+Cmake 编译和环境配置(第二篇,中级篇, 重新编译)

1.下载VTK和Cmake 这里不介绍了。我的VTK 8.2.0 cmake 3.27.4 就是不服这编译器了。重新来一次 打开Cmake&#xff0c;把VTK源文件路径和目标路径设置一下&#xff08;目标路径自己设置&#xff0c;随意&#xff09; 点击Configure&#xff1a;。 点击下一步 选择好 Qt的gcc…

C++网狐服务器引入开源日志库spdlog

很多人对日志库不以为然&#xff0c;包括网狐这种十几年的公司都不重视&#xff0c;其实日志库记录的东西能在线上出问题时高效解决&#xff0c;特别是别人写的东西&#xff0c;人又走了&#xff0c;出了问题&#xff0c;还可以用日志分析快速解决。要是没有日志记录&#xff0…

基于SpringBoot2的后台业务管理系统

概述 SpringBoot-Plus 是一个适合大系统拆分成小系统的架构&#xff0c;java快速开发平台&#xff0c;或者是一个微服务系统。其中加入了Thymeleaf数据模板语言代替了之前的JSP页面方式。页面展示采用Layui前端框架&#xff0c;包含了用户管理&#xff0c;角色管理&#xff0c…

2.92-KFKG射频微波同轴连接器的电气特性

2.92mm连接器的名称是以其外导体内径命名的&#xff0c;采用空气介质工作频率高达40GHz,可与SMA和3.5mm连接器互换对插。优越的电性能、可靠的连接尤其适用于测试系统和武*装备&#xff0c;成为国际上应用最为广泛的毫米微波连接器之一。 电气特性&#xff1a; 特性阻抗&…

JavaScript基础语法04——输入输出语法

嗨&#xff0c;大家好&#xff0c;我是雷工。 今天学习JavaScript基础语法&#xff0c;输入输出语法&#xff0c;以下为学习笔记。 1、输出语法&#xff1a; 1.1、alert&#xff08;&#xff09; 作用&#xff1a;界面弹出警告对话框。 示例&#xff1a; <script>aler…

为什么要学习C++

操作系统历史 UINX操作系统诞生之初是用汇编语言编写的。随着UNIX的发展&#xff0c;汇编语言的开发效率成为一个瓶颈。寻找新的高效开发语言成为UNIX开发者需要解决的问题。当时BCPL语言成为了当时的选择之一。Ken Thomposn对BCPL进行简化得到了B语言。但是B语言不是直接生成…

如何使用Puppeteer进行新闻网站数据抓取和聚合

导语 Puppeteer是一个基于Node.js的库&#xff0c;它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer&#xff0c;我们可以实现各种自动化任务&#xff0c;如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用Puppeteer进行新闻网站数据抓取和聚…

PostgreSQL 查询语句大全

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

划分字母区间【贪心算法】

划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。…

python -- 实现路径的匹配,剔除掉指定路径,并保存路径

python – 实现路径的匹配&#xff0c;剔除掉指定路径&#xff0c;并保存路径 在处理nc数据时&#xff0c;由于部分数据在插值的过程中&#xff0c;存在过多的0值&#xff0c;使得在制作标签时该时刻的数据出现报错&#xff0c;但是对于一年的数据量来说&#xff0c;无关紧要&…

HTTP 协议

目录 ​编辑一、HTTP 协议是什么 二、抓包工具的使用 三、HTTP 请求 1、认识 URL 2、认识方法 3、认识请求 “报头” HOST &#xff1a; Content-Length 和 Content-Type​编辑 User-Agent Referer Cookie 四、HTTP 响应 1、认识状态码 2、通过 form 表单构造 H…

38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

springboot为 spring mvc 提供的静态资源管理 ★ Spring Boot为Spring MVC提供了默认的静态资源管理&#xff1a; ▲ 默认的四个静态资源目录&#xff1a; /META-INF/resources > /resources > /static > /public ▲ ResourceProperties.java类的源代码&#xff0…

iOS开发Swift-6-深色模式,类与对象,MVC模式,弹出框,闭包-趣味问答App

1.创建趣味问答App项目 2.创建一个问题文本&#xff0c;水平居中约束。 创建蓝、红两个按钮&#xff0c;放入Stack View中&#xff0c;给StackView水平居中约束&#xff0c;下边约束&#xff0c;设置两按钮间距为20. 设置进度条view与safe View关系为equal width。设置他们的比…

设计模式—外观模式(Facade)

目录 一、什么是外观模式&#xff1f; 二、外观模式具有什么优点吗&#xff1f; 三、外观模式具有什么缺点呢&#xff1f; 四、什么时候使用外观模式&#xff1f; 五、代码展示 ①、股民炒股代码 ②、投资基金代码 ③外观模式 思维导图 一、什么是外观模式&#xff1f;…

vue3实现日历日期选择(不使用任何插件,纯javaScript实现)

个人项目地址&#xff1a; SubTopH前端开发个人站 &#xff08;自己开发的前端功能和UI组件&#xff0c;一些有趣的小功能&#xff0c;感兴趣的伙伴可以访问&#xff0c;欢迎提出更好的想法&#xff0c;私信沟通&#xff0c;网站属于静态页面&#xff09; SubTopH前端开发个人…

中东 Shopify 如何使用 Bytebase 构建一站式数据库开发工作流

公司简介 Salla 是一家 2016 年成立&#xff0c;位于沙特麦加的自建站电商平台。 作为中东 Shopify&#xff0c;其最大的特点是支持阿拉伯语建站&#xff0c;并且提供更多适应中东地区特点的本地化服务。截止目前&#xff0c;已有 47,000 家店铺入驻 Salla&#xff0c;商品销售…