当前位置: 首页 > 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配置单元测试
  • “大数据应用场景”之隔壁老王(连载四)
  • 【css3】浏览器内核及其兼容性
  • 3.7、@ResponseBody 和 @RestController
  • angular学习第一篇-----环境搭建
  • Django 博客开发教程 16 - 统计文章阅读量
  • FastReport在线报表设计器工作原理
  • Git的一些常用操作
  • Java多线程(4):使用线程池执行定时任务
  • Making An Indicator With Pure CSS
  • nginx 配置多 域名 + 多 https
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • springboot_database项目介绍
  • ubuntu 下nginx安装 并支持https协议
  • Vue UI框架库开发介绍
  • 安卓应用性能调试和优化经验分享
  • 面试总结JavaScript篇
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何优雅地使用 Sublime Text
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 试着探索高并发下的系统架构面貌
  • 学习HTTP相关知识笔记
  •  一套莫尔斯电报听写、翻译系统
  • 正则表达式
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #NOIP 2014#Day.2 T3 解方程
  • (LeetCode 49)Anagrams
  • (过滤器)Filter和(监听器)listener
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (排序详解之 堆排序)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .apk 成为历史!
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Micro Framework初体验(二)
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 使用配置文件
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET基础篇——反射的奥妙
  • [2016.7 test.5] T1