当前位置: 首页 > news >正文

剑指 Offer(第2版)面试题 12:矩阵中的路径

剑指 Offer(第2版)面试题 12:矩阵中的路径

  • 剑指 Offer(第2版)面试题 12:矩阵中的路径
    • 解法1:回溯

剑指 Offer(第2版)面试题 12:矩阵中的路径

题目来源:23. 矩阵中的路径

解法1:回溯

回溯算法模板题。

我们先枚举单词的起点,然后依次枚举单词的每个字母。

过程中需要将已经使用过的字母改成一个特殊字母(‘*’),以避免重复使用字符,注意回溯是要把特殊字母改回原来的状态,这也是回溯算法的精髓。

代码:

class Solution
{
private:const int dx[4] = {-1, 0, 1, 0};const int dy[4] = {0, 1, 0, -1};public:bool hasPath(vector<vector<char>> &matrix, string &str){// 特判if (matrix.empty())return false;int m = matrix.size(), n = m ? matrix[0].size() : 0;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (backtracking(matrix, str, 0, i, j))return true;return false;}// 辅函数 - 回溯bool backtracking(vector<vector<char>> &matrix, string &str, int level, int x, int y){if (matrix[x][y] != str[level])return false;if (level == str.size() - 1)return true;char c = matrix[x][y];matrix[x][y] = '*';for (int i = 0; i < 4; i++){int r = x + dx[i], c = y + dy[i];if (r >= 0 && r < matrix.size() && c >= 0 && c < matrix[0].size())if (backtracking(matrix, str, level + 1, r, c))return true;}matrix[x][y] = c;return false;}
};

复杂度分析:

时间复杂度:O(m*n*3k),其中 m 和 n 分别是二维矩阵 matrix 的行数和列数。遍历二维矩阵 matrix 的每个元素,作为单词的起点,单词的每个字母一共有上下左右四个方向可以选择,但由于不能走回头路,所以除了单词首字母外,仅有 3 种选择。

空间复杂度:O(1)。

相关文章:

  • Django回顾【四】之模型层
  • Mybatis-Plus测试出现java.lang.IllegalStateException异常
  • 前端大文件上传webuploader(react + umi)
  • 企业电子招投标采购系统源码之电子招投标的组成
  • 视频后期效果制作工具Mocha Pro 2022 Plugins mac中文版软件介绍
  • vue3 导出数据为 excel 文件
  • 四大视角看EMC设计:滤波、接地、屏蔽、PCB布局
  • dockerfile与docker-compose解释及对比
  • No matching version found for @babel/compat-data@^7.23.5 处理
  • 【Java程序员面试专栏 专业技能篇 】Java SE核心面试指引(四):Java新特性
  • k8s上Pod全自动调度、定向调度、亲和性调度、污点和容忍调度详解
  • 测试与管理 Quota
  • shell编程系列(9)-使用cut选择列
  • Linux取消挂载相关
  • MicrosoftVisualStudio配置单元测试
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • golang 发送GET和POST示例
  • iOS | NSProxy
  • Java,console输出实时的转向GUI textbox
  • Java多态
  • js递归,无限分级树形折叠菜单
  • KMP算法及优化
  • Linux CTF 逆向入门
  • mac修复ab及siege安装
  • Magento 1.x 中文订单打印乱码
  • Material Design
  • Python学习笔记 字符串拼接
  • 闭包--闭包作用之保存(一)
  • 记一次删除Git记录中的大文件的过程
  • 前端存储 - localStorage
  • 为什么要用IPython/Jupyter?
  • 我是如何设计 Upload 上传组件的
  • 异常机制详解
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 阿里云API、SDK和CLI应用实践方案
  • 通过调用文摘列表API获取文摘
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 飞书APP集成平台-数字化落地
  • ###项目技术发展史
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读40-45)图像描述1
  • (十)c52学习之旅-定时器实验
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • 、写入Shellcode到注册表上线
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net mvc总结
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET大文件上传知识整理