矩阵每一行重复_【剑指offer】65 矩阵中的路径

4d9bb8aef45b889ee20f3c59e41bae9a.gif

题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如下图

1aeaa7c1f488bfdc3e37af6f86aadd95.png

矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

示例1

输入

 "ABCESFCSADEE",3,4,"ABCCED"

返回值

 true

示例2

输入

 "ABCESFCSADEE",3,4,"ABCB"

返回值

 false

- 解题思路

分析:回溯算法 这是一个可以用回朔法解决的典型题。首先,在矩阵中任选一个格子作为路径的起点。如果路径上的第i个字符不是ch,那么这个格子不可能处在路径上的第i个位置。如果路径上的第i个字符正好是ch,那么往相邻的格子寻找路径上的第i+1个字符。除在矩阵边界上的格子之外,其他格子都有4个相邻的格子。重复这个过程直到路径上的所有字符都在矩阵中找到相应的位置。  由于回朔法的递归特性,路径可以被开成一个栈。当在矩阵中定位了路径中前n个字符的位置之后,在与第n个字符对应的格子的周围都没有找到第n+1个字符,这个时候只要在路径上回到第n-1个字符,重新定位第n个字符。  由于路径不能重复进入矩阵的格子,还需要定义和字符矩阵大小一样的布尔值矩阵,用来标识路径是否已经进入每个格子。当矩阵中坐标为(row,col)的格子和路径字符串中相应的字符一样时,从4个相邻的格子(row,col-1),(row-1,col),(row,col+1)以及(row+1,col)中去定位路径字符串中下一个字符如果4个相邻的格子都没有匹配字符串中下一个的字符,表明当前路径字符串中字符在矩阵中的定位不正确,我们需要回到前一个,然后重新定位。  一直重复这个过程,直到路径字符串上所有字符都在矩阵中找到合适的位置

- Java实现

public class Solution {    private final static int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};    private int rows;    private int cols;    public boolean hasPath(char[] array, int rows, int cols, char[] str) {        if (rows == 0 || cols == 0) return false;        this.rows = rows;        this.cols = cols;        boolean[][] marked = new boolean[rows][cols];        char[][] matrix = buildMatrix(array);        for (int i = 0; i < rows; i++)            for (int j = 0; j < cols; j++)                if (backtracking(matrix, str, marked, 0, i, j))                    return true;        return false;    }    private boolean backtracking(char[][] matrix, char[] str,                                 boolean[][] marked, int pathLen, int r, int c) {        if (pathLen == str.length) return true;        if (r < 0 || r >= rows || c < 0 || c >= cols                || matrix[r][c] != str[pathLen] || marked[r][c]) {            return false;        }        marked[r][c] = true;        for (int[] n : next)            if (backtracking(matrix, str, marked, pathLen + 1, r + n[0], c + n[1]))                return true;        marked[r][c] = false;        return false;    }    private char[][] buildMatrix(char[] array) {        char[][] matrix = new char[rows][cols];        for (int r = 0, idx = 0; r < rows; r++)            for (int c = 0; c < cols; c++)                matrix[r][c] = array[idx++];        return matrix;    }}

d463bf441d7ec4272c59721d2baf8119.png

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

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

相关文章

mysql5.464位下载_MySQL Front 64位

MySQL-Front是一款实用的MYSQL数据库管理工具&#xff0c;软件自带了简体中文语言&#xff0c;与mysql数据库连接后就可以对其地蚝各类管理操作了&#xff0c;比如对域进行编辑、增加和删除&#xff0c;执行sql脚本或者导出数据库等操作&#xff0c;除此之外还可以将数据库保存…

a5d27 第1级bootloader启动问题

drivers/sdhc.c里的 static int sdhc_set_clock(struct sd_card *sdcard, unsigned int clock) 这段代码总是会超时&#xff0c;造成启动失败。 log如下图

LDA-Latent Dirichlet Allocation 学习笔记

以下内容主要基于《Latent Dirichlet Allocation》,JMLR-2003一文&#xff0c;另加入了一些自己的理解,刚开始了解&#xff0c;有不对的还请各位指正。 LDA-Latent Dirichlet Allocation JMLR-2003 摘要&#xff1a;本文讨论的LDA是对于离散数据集&#xff0c;如文本集&#xf…

app 图标规格参考表

转自&#xff1a;http://www.cocoachina.com/appstore/top/2012/1105/5031.html 像我一样记不住iOS应用图标像素尺寸的开发者不在少数&#xff0c;我经常需要查询不同设备上的应用尺寸&#xff0c;为了方便自己、方便大家&#xff0c;我制作了下面的图表供大家参考。 iPhone、i…

mysql数据库开启远程连接_安装MySQL数据库并开启远程访问

一、安装MySQL数据库MySQL安装在系统盘下(C:\Program Files)&#xff0c;方便系统备份。1.双击安装程序&#xff0c;勾选“I accept the license terms”&#xff0c;点击“Next”按钮。2.检测需要的安装&#xff0c;直接点击Next。3.按照下图所示步骤安装。4.设置密码&#xf…

flume mysql hdfs_利用Flume将MySQL表数据准实时抽取到HDFS

一、为什么要用到Flume在以前搭建HAWQ数据仓库实验环境时&#xff0c;我使用Sqoop抽取从MySQL数据库增量抽取数据到HDFS&#xff0c;然后用HAWQ的外部表进行访问。这种方式只需要很少量的配置即可完成数据抽取任务&#xff0c;但缺点同样明显&#xff0c;那就是实时性。Sqoop使…

一种解决运行程序报“应用程序配置不正确”的问题

在我们开发工程中&#xff0c;可能有些情况下&#xff0c;不能在本机进行调试。这个时候我们一般会使用VM&#xff08;vmware)建立一个虚拟机环境&#xff0c;然后把编译过的程序放在该虚拟机环境下执行调试。可是在某些情况下&#xff0c;不管我们编译的是debug还是release版本…

mysql+ubunt+绿色安装_Mysql在ubuntu18上的安装及简单使用

数据相关行业都离不开数据库&#xff0c;mysql在ubuntu上的安装比在windows上安装简单多了&#xff0c;下面我记录一下自己成功安装的步骤和使用。1.安装软件首先更新一下源&#xff1a;sudo apt-get update然后安装mysql服务器端&#xff1a;sudo apt-get install mysql-serve…

sql字符串拼接_Mybatis的SqlSession执行sql过程

上一篇分析了SqlSession执行sql的过程&#xff0c;其中并没有分析sql是从哪里来的&#xff0c;今天就来仔细分析下。Sql来源从上一篇的最后一步执行sql那里倒推sql的来源&#xff0c;源码主要过程如下图&#xff1a;可以看到最后是通过BoundSql直接获取的sql&#xff0c;然后往…

深入浅出FSUIPC的作用以及使用方法

看此贴前您需要掌握的技能或知识&#xff1a;1. 有FSX或FS2004并正确安装了FSUIPC 2. 具备一定的C语言理解能力&#xff0c;C语言是一切高级语言的基础&#xff0c;单片机主要也用的C语言。 3. 掌握以下几种编程语言之一即可&#xff1a; VC\VB\C#\DELPHI\JAVA\CMFC\.NET版的C或…

在 VC6 中使用 GdiPlus-安装

安装三部曲&#xff1a; Step1&#xff1a;下载 GdiPlus SDK 文件包&#xff1b; 链接地址1&#xff1a;http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip 链接地址2&#xff1a;http://www.codersource.net/samples/mfcgdiplus.zip Step2&#xff1a;安装&#xff1b; &a…

ASP.NET MVC 的多国语系支持

ASP.NET MVC 的多国语系支持 posted on 2014-05-14 11:31 stickout 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/linhui/p/3727364.html

aliyun centos6 安装mysql_阿里云CentOS6.8安装MySQL5.6

1、使用SSH Secure Shell工具连接阿里云服务器2、使用SSH Secure File Transfer工具上传MySQL压缩包3、解压MySQL压缩包到指定目录(需要在先/usr/local下创建mysql目录)进入压缩文件存放位置&#xff0c;进行解打包&#xff1a;tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.ta…

用Javascript获取页面元素的位置

制作网页的过程中&#xff0c;你有时候需要知道某个元素在网页上的确切位置。 下面的教程总结了Javascript在网页定位方面的相关知识。 一、网页的大小和浏览器窗口的大小 首先&#xff0c;要明确两个基本概念。 一张网页的全部面积&#xff0c;就是它的大小。通常情况下&#…

[Qt] 利用QtWebKit完成JavaScript访问C++对象

http://blog.csdn.net/longsir_area/article/details/42965565 一. 介绍 在浏览器扩展或者WebApp的项目经常用的脚本语言JavaScript有很多局限性&#xff0c;比如&#xff0c;javascript语言不能够夸窗口访问js对象&#xff0c;不能直接读写磁盘文件&#xff08;这个…

mysql三大范式_MySQL学习笔记

1、数据库结构设计1、总-总体流程图2、分-【提取属性】业务分析评价的属性:{用户&#xff0c;课程主标题&#xff0c;内容&#xff0c;综合评分&#xff0c;内容实用&#xff0c;简洁易懂&#xff0c;逻辑分析&#xff0c;发布时间} 问答评论属性&#xff1a;{类型&#xff0c;…

QT webkit 各个类之间关系--QWebView-QWebPag

一、QT webkit简介 1.Qt Qt&#xff08;发音同 cute&#xff09;是一个跨平台的C应用程式开发框架&#xff0c;有时又被称为C部件工具箱。Qt被用在KDE桌面环境、Opera、Google Earth、Skype、Adobe Photoshop Album和VirtualBox的开发中。它是挪威Qt Software 的产品&#xff0…

vue 文件转换二进制_在vue中使用axios实现post方式获取二进制流下载文件(实例代码)...

需求点击导出下载表格对应的excel文件在 vue 项目中,使用的 axios ,后台 java 提供的 post 接口 api实现第一步,在 axios 请求中加入参数,表示接收的数据为二进制文件流responseType: "blob"第二步,在拿到数据流之后,把流转为指定文件格式并创建a标签,模拟点击下载,实…

vs生成qt moc文件

1. 右键需要生成moc文件的头文件 2. 将生产的moc加入工程中

javascript好文---深入理解定位父级offsetParent及偏移大小

前面的话 偏移量(offset dimension)是javascript中的一个重要的概念。涉及到偏移量的主要是offsetLeft、offsetTop、offsetHeight、offsetWidth这四个属性。当然&#xff0c;还有一个偏移参照——定位父级offsetParent。本文将详细介绍该部分内容 offsetParent定位父级 在理解…