问题描述:

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

思路:

这实际上是回溯法的一个应用。所谓回溯法就是按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。具体到这道题目就是对于每个字符,如果在矩阵中找到了其在矩阵中的位置,进行下一次寻找的时候,可以从上、下、左、右四个方向(边界元素除外)进行递归寻找,如果找到了则继续寻找下一个字符;如果没有找到的话,则回到上一个字符重新寻找。直到找到全部字符在矩阵中对应的位置。

代码:

public class Solution {/* @author miracle*/public boolean hasPath(char[] matrix, int rows, int cols, char[] str){//创建一个布尔数组boolean visited[]= new boolean[matrix.length];for(int i = 0;i<rows;i++){for(int j=0;j<cols;j++){if(hasPathCore(matrix,i,j,0,rows,cols,str,visited)){return true;}}}return false;}public boolean hasPathCore(char[] matrix,int i,int j,int k,int rows,int cols,char[] str,boolean[] visited){// 对于给定行数和列数得到其在矩阵中的下标int index = i*cols+j;//判断合法性if(i<0||i>=rows||j<0||j>=cols||matrix[index]!=str[k]||visited[index]){return false;}visited[index] = true;// 如果递归到最后一个位置的字符,则表明前面位置的字符都在矩阵中找到了对应的位置if (k == str.length - 1)return true;if(hasPathCore(matrix,i-1,j,k+1,rows,cols,str,visited)||hasPathCore(matrix,i,j-1,k+1,rows,cols,str,visited)||hasPathCore(matrix,i+1,j,k+1,rows,cols,str,visited)||hasPathCore(matrix,i,j+1,k+1,rows,cols,str,visited)){return true;}else{//如果相邻格子的字符都没有匹配到下一个字符,则需要回到前一个格子,从而需要把把位置的状态重新设定为未访问k--;visited[index] = false;}return false;}
}

剑指offer——矩阵中的路径相关推荐

  1. 剑指offer 矩阵中的路径 @python

    剑指offer 矩阵中的路径 @python 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...

  2. [剑指Offer]-矩阵中的路径

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

  3. 剑指offer:矩阵中的路径

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

  4. 不支持给定路径的格式_剑指offer_12_矩阵中的路径

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

  5. 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)

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

  6. 剑指offer-矩阵中的路径

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

  7. 剑指 Offer II 110. 所有路径

    链接: l剑指 Offer II 110. 所有路径 代码:代码没通过 class Solution { public:vector<vector<int>> allPaths ...

  8. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  9. 剑指Offer-矩阵中的路径-Python

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

最新文章

  1. VS Code 2022路线图:大量Spring Boot优化提上日程!难道是被JB Code吓到了?
  2. 思考ANDROID架构(4):HOW-TO, 如何从API洞悉软件的话语权
  3. 拼购电商不是团购,但扎的的却是三四五线城市老百姓的心
  4. 分布式CAP详解,为什么三个指标不可能同时做到。
  5. go flag包获取命令行参数使用示例
  6. excel 宏编程_在 Excel 中使用 Python 开发宏脚本
  7. OpenKruise 2021 规划:More than workloads
  8. python unittest库的入门学习
  9. Opencv3编程入门学习笔记(二)之显式创建Mat对象
  10. 从JVM入手,聊聊Java的学习和复习!
  11. 阿里云智能语音交互服务导览
  12. linux监听端口丢失,查看 linux 端口 监听
  13. 2.4GHz/5.8GHz WiFi 天线基础知识
  14. 《算法导论》第三版第4章 分治策略 练习思考题 个人答案
  15. 计算机系统更新从哪关闭,电脑总提示系统更新,怎么关闭?
  16. ERROR: ld.so: object ‘/usr/local/lib/libc2.28.so‘ from /etc/ld.so.preload cannot be preloaded ...
  17. /proc/config.gz 是什么
  18. requires_grad,grad_fn,grad的含义及使用
  19. Android11 热点配置信息保存分析
  20. 云之讯语音、短信验证码实现

热门文章

  1. 浅谈2017棋牌游戏的前景 运营 推广(上) 转贴
  2. 强大的Excel 的 VBA
  3. 数学速算法_怎样让孩子喜欢上数学,除了老师,家长更应该把这4件事做好
  4. 加密货币世界里的「数字乞丐」
  5. 如此惊艳的财务报表,领导想不重用你都难!
  6. 计算机网络课程设计小区组网,计算机网络课程设计-组建智能化小区局域网参考.doc...
  7. 认识LINUX各个版本
  8. 深入理解Lustre文件系统-第5篇 LDLM:锁管理者
  9. 微生物是如何影响身体健康的
  10. 使命召唤5该服务器没有响应,使命召唤5玩不了怎么办 使命召唤5打不开解决办法...