剑指offer 矩阵中的路径

2023-05-16

题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。


解题思路:回溯法解决本题目

bool hasPathCore(const char* matrix, int rows, int cols, int row, int col, const char *str, int& pathLength, bool* visited) {

    if (str[pathLength] == '\0') {
        return true;//若是遇到结束符则证明匹配结束
    }

    bool hasPath = false;
    if (row >= 0 && row <= rows && col >= 0 && col < cols &&matrix[row*cols + col] == str[pathLength] && !visited[row*cols + col]) {
        //判断的条件是row col都在规定的范围内 而且矩阵中row*cols + col对应的值刚好是str[pathLength]值 并且row*cols + col没有访问过
        ++pathLength;
        visited[row*cols + col] = true;

        //匹配完当前的值 挨个挨个找 就是这么暴力 左上右下
        hasPath = hasPathCore(matrix,rows,cols,row,col-1,str,pathLength,visited)|| hasPathCore(matrix, rows, cols, row-1, col, str, pathLength, visited)|| hasPathCore(matrix, rows, cols, row, col +1, str, pathLength, visited)|| hasPathCore(matrix, rows, cols, row+1, col, str, pathLength, visited);

        if (!hasPath)
        {
            --pathLength;//如果不匹配 匹配长度减一
            visited[row*cols + col] = false;//这里的位置设置为false 因为有可能会再次经过这里
        }
    }
    return hasPath;

}


bool hasPath(char* matrix, int rows, int cols, char* str)
{
    if (matrix == nullptr || rows < 1 || cols < 1 || str == nullptr) {
        return false;
   }

    bool *visited = new bool[rows*cols];//定义visited数组 记录是否访问过
    memset(visited, 0, rows*cols);//初始化visited数组 赋值为false

    int pathLength = 0;//当前符合条件的路径长度
    for (int row = 0; row < rows; ++row) {
        for (int col = 0; col < cols; ++col) {
            if (hasPathCore(matrix, rows, cols, row, col, str, pathLength, visited)) {
                return true;
            }
        }
    }
    delete[] visited;

    return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer 矩阵中的路径 的相关文章

  • RISC与CISC比较

    RISC的设计重点在于降低由硬件执行指令的复杂度 xff0c 因为软件比硬件容易提供更大的灵活性和更高的智能 xff0c 因此RISC设计对编译器有更高的要求 xff1b CISC的设计则更侧重于硬件执行指令的功能 xff0c 使CISC的
  • 操作系统选择调度方式和算法的若干准则

    1 调度的类型 按调度的层次 xff1a 长期 xff08 长程 作业 高级 xff09 调度 xff1b 中期 xff08 中级 中程 xff09 调度 xff1b 短期 xff08 短程 进程 低级 xff09 调度 按OS 的类型 x
  • 提灯过桥问题

    题目 xff1a 小明一家过一座桥 xff0c 过桥时是黑夜 xff0c 所以必须有灯 现在小明过桥要1秒 xff0c 小明的弟弟要3秒 xff0c 小明的爸爸要6秒 xff0c 小明的妈妈要8秒 xff0c 小明的爷爷要12秒 每次此桥最
  • 如何判断一个整数数组中是否有重复元素

    题目 xff1a 写一个函数判断一个int类型的数组是否是有效的 所谓有效是指 xff1a 假设数组大小为n xff0c 那么这个int数组里的值为0 n 1之间的数 xff0c 并且每个数只能出现一次 xff0c 否则就是无效数组 例如
  • C++发送HTTP请求---亲测可行

    转自 xff1a http hi baidu com benbearlove item 1671c23017575825b3c0c53f 环境 xp sp3 vs2008 vs2010在静态库中使用 MFC include lt afxwi
  • 百度2014开发测试工程师笔试题(沈阳站)

    时间 xff1a 2013 9 21 地点 xff1a 沈阳 职位 xff1a 开发测试工程师
  • 2014百度校招开发测试工程师笔试题

    时间 xff1a 2013 9 28 地点 xff1a 深圳 职位 xff1a 开发测试工程师
  • 整体了解HADOOP框架及一些开源项目

    Hadoop框架中 xff0c 有很多优秀的工具 xff0c 帮助我们解决工作中的问题 Hadoop的位置 从上图可以看出 xff0c 越往右 xff0c 实时性越高 xff0c 越往上 xff0c 涉及到算法等越多 越往上 xff0c 越
  • Kafka简介

    Kafka简介 在当前的大数据时代 xff0c 第一个挑战是海量数据的收集 xff0c 另一个就是这些数据的分析 数据分析的类型通常有用户行为数据 应用性能跟踪数据 活动数据日志 事件消息等 消息发布机制用于连接各种应用并在它们之间路由消息
  • Flume入门笔记------架构以及应用介绍

    在具体介绍本文内容之前 xff0c 先给大家看一下Hadoop业务的整体开发流程 xff1a 从Hadoop的业务开发流程图中可以看出 xff0c 在大数据的业务处理过程中 xff0c 对于数据的采集是十分重要的一步 xff0c 也是不可避
  • 分布式服务框架dubbo原理解析

    alibaba有好几个分布式框架 xff0c 主要有 xff1a 进行远程调用 类似于RMI的这种远程调用 的 dubbo hsf xff0c jms消息服务 napoli notify xff0c KV数据库 tair 等 这个框架 工具
  • Linux下安装ElasticSearch

    Linux下安装ElasticSearch 一 下载 amp 安装二 安装中遇到的问题及解决方案三 使用中遇到的问题及解决方案四 安装head五 安装kibana 一 下载 amp 安装 先安装JDK 下载elasticsearch 7 0
  • cmake学习1:基本的CMakeLists的编写

    前言 自己在使用cmake进行编译工程的时候不太了解cmake的基本使用方法 有时候出现找不到第三方库的问题也不知如何排查 因此相对cmake有个稍微系统的认识 希望能用这个强大的工具来更好的为自己的工程服务 因此总结为了几篇博客 主要参考
  • ZooKeeper 报错 ERROR [main:ZooKeeperServerMain@64] 的解决办法

    myid span class hljs type ERROR span main span class hljs type ZooKeeperServerMain span 64 span class hljs number 64 spa
  • Ubuntu14.04下安装cmake 3.9.6

    简述 xff1a CMake是一个跨平台 的编译自动配置 工具 xff0c 它使用一个名为CMakeLists txt 的文件来描述构建过程 xff0c 可以产生标准的构建文件 它可以用简单的语句来描述所有平台的安装 编译过程 它能够输出各
  • 二维数组功能测试,超详细

    include lt stdio h gt int main char buf 2 5 61 39 a 39 39 b 39 39 c 39 39 d 39 39 e 39 39 f 39 39 g 39 39 h 39 39 i 39 3
  • Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    简述 xff1a CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automak
  • 知识点总结:Java核心技术(卷1)

    Java核心技术 xff08 卷1 xff09 一 基础概念 1 1 基本程序设计结构 1 1 数据类型 1 1 1 数值类型 1 从java7开始 xff0c 加上前缀0b或0B就可以写二进制 xff1b 2 指数的表示 十进制中以10为
  • 单片机-控制-直流电机-基于L9110S-、L298N、TB6612FNG驱动

    直流电机 xff08 direct current machine xff09 能将直流电能转换成机械能 xff08 直流电动机 xff09 或将机械能转换成直流电能 xff08 直流发电机 xff09 的旋转电机 它是能实现直流电能和机械
  • 【一文弄懂】张正友标定法-完整学习笔记-从原理到实战

    张正友标定法 完整学习笔记 从原理到实战 文章目录 张正友标定法 完整学习笔记 从原理到实战 xff08 零 xff09 前言 xff1a 1 为什么需要标定 xff1f 2 相机标定的已知条件和待求解是什么 xff1f 标定前的已知条件

随机推荐

  • realsense ——SR300 相机使用小记

    环境搭建相关的参考资料挺多的 xff0c 这里就不多说了 这里记一些相关的api 算了 xff0c 还是给出自己的配置记录吧https blog csdn net hehehetanchaow article details 1057958
  • kubeadm安装部署Kubernetes(k8s)与部署 Dashboard web_UI(附Kubernetes安装脚本)

    前言 Kubernetes作为容器编排工具 xff0c 简化容器管理 xff0c 提升工作效率而颇受青睐 很多新手部署Kubernetes由于 科学上网 问题举步维艰 xff0c 本文以实战经验详解kubeadm不用 科学上网 部署Kube
  • 开源飞控资料

    四轴开源资料 http merafour blog 163 com blog m 61 0 amp t 61 1 amp c 61 fks 08406908208008307008408308409508608708806608408408
  • 深度学习视频数据集(动作识别):UCF-101

    UCF 101 官网 xff1a https www crcv ucf edu research data sets ucf101 网盘 xff1a 链接 xff1a https pan baidu com s 1RsJuykWyUlQ4
  • 视频分析模型(行为识别):C3D

    C3D 文章目录 C3D1 简介1 1 背景1 2 C3D特点1 3 视频描述符1 4 C3D的结果 2 架构2 1 工作流程2 2 网络结构2 3 3D卷积和池化2 4 kernel 的时间深度 3 可视化3 1 特征图3 2 特征嵌入
  • OpenCV下车牌定位算法实现代码 (二)

    前面介绍了用OpenCV的squares实例定位车牌的算法 xff0c 效果不是很理想 车牌定位的方法有很多种 xff0c 这里我们从汽车图像的纹理特征入手 xff0c 找出车牌不同于背景的特征是车牌定位的关键 观察多幅汽车图片我们会发现车
  • 旷视张祥雨:神经网络架构设计新思路

    点击上方 CVer xff0c 选择加 34 星标 34 置顶 重磅干货 xff0c 第一时间送达 本文转载自 xff1a AI科技评论 作者 蒋宝尚 编辑 青暮 深度学习模型在很多任务上都取得了不错的效果 xff0c 但调参却是一项非常痛
  • 发现三本不错的讲解数据存储的书

    研究数据存储 xff0c 没有很多现成的东西 xff0c 但是可以参考数据库系统的存储实现的内容 xff0c 发现三本书 xff0c 觉得值得一读 数据库系统全书 http www china pub com computers commo
  • Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, 4

    处理Failed to get convolution algorithm This is probably because cuDNN failed to initialize so try looking to see if a war
  • 字符型设备驱动程序--gpio 驱动实例

    概述 xff1a 字符设备驱动程序 xff1a 是按照字符设备要求完成的由操作系统调用的代码 重点理解以下内容 1 驱动是写给操作系统的代码 xff0c 它不是直接给用户层程序调用的 xff0c 而是给系统调用的 2 所以驱动要向系统注册
  • 协议栈

    协议栈 协议栈是指网络中各层协议的总和 xff0c 其形象的反映了一个网络中数据传输的过程 xff1a 由上层协议到底层协议 xff0c 再由底层协议到上层协议 使用最广泛的是英特网协议栈 xff0c 由上到下的协议分别是 xff1a 应用
  • 再见2011,你好,2012。

    不会写文章 xff0c 这个算是对自己的一个总结吧 xff0c 毕业一年半了 xff0c 从事嵌入式也有一年半了 xff0c 总觉得自己连入门都谈不上 xff0c 整天都看上去很忙 xff0c 有时候确实有一大堆的事情要做 xff0c 但是
  • matlab读取realsense bag文件数据

    代码参考 xff1a https dev intelrealsense com docs matlab wrapper 本示例的功能 xff1a matlab代码 xff1a 给出bag文件路径 xff0c 显示realsense相机型号
  • vncserver:command not found

    Question Solution 1 使用root用户登录 xff0c 运行 yum install tigervnc server 2 使用其他用户 eg opuser 登录 xff0c 启动vncserver xff0c 设置pass
  • CKF MCSCKF UKF EKF滤波性能对比

    CKF MCSCKF UKF EKF滤波性能对比 在非线性滤波中 比较了CKF MCSCKF UKF EKF 几种非线性滤波的性能 用MATLAB进行仿真 八维非线性滤波中 CKF MCSCKF 比较稳定 EKF UKF 表现不好 MATL
  • 自制串口调试助手

    span class token keyword using span span class token namespace System span span class token punctuation span span class
  • 文件描述符和套接字

    文件描述符 xff1a 文件描述符在形式上是一个非负整数 实际上 xff0c 它是一个索引值 xff0c 指向内核为每一个进程所维护的该进程打开文件的记录表 当程序打开一个现有文件或者创建一个新文件时 xff0c 内核向进程返回一个文件描述
  • Papers with Code 2020 全年回顾(顶流论文+顶流代码+Benchmarks)

    点击上方 CVer xff0c 选择加 34 星标 34 置顶 重磅干货 xff0c 第一时间送达 本文转载自 xff1a AI公园 作者 xff1a Ross Taylor 编译 xff1a ronghuaiyang 导读 2020年Pa
  • Nginx 多进程模型是如何实现高并发的?

    进程数与并发数不存在很直接的关系 这取决取server采用的工作方式 如果一个server采用一个进程负责一个request的方式 xff0c 那么进程数就是并发数 那么显而易见的 xff0c 就是会有很多进程在等待中 等什么 xff1f
  • 剑指offer 矩阵中的路径

    题目描述 请设计一个函数 xff0c 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一个格子开始 xff0c 每一步可以在矩阵中向左 xff0c 向右 xff0c 向上 xff0c 向下移动一个格子 如果