面试题66:矩阵中的路径
来源:互联网 发布:淘宝清洗已过期 编辑:程序博客网 时间:2024/05/20 22:40
分析:回溯算法
这是一个可以用回朔法解决的典型题。首先,在矩阵中任选一个格子作为路径的起点。如果路径上的第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个相邻的格子都没有匹配字符串中下一个的字符,表明当前路径字符串中字符在矩阵中的定位不正确,我们需要回到前一个,然后重新定位。
一直重复这个过程,直到路径字符串上所有字符都在矩阵中找到合适的位置
/**用一个状态数组flag保存之前访问过的字符,然后再分别按上,下,左,右递归*/public class Solution { public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { if(matrix==null||rows<=0||cols<=0||str==null) return false; boolean []flag=new boolean[matrix.length]; 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,flag)) return true; } } return false; } public boolean hasPathCore(char[]matrix,int rows,int cols,int row,int col,char[]str,int pathLength,boolean []flag){ if(pathLength==str.length) return true; boolean hasPath=false; if(row<rows&&row>=0&&col<cols&&col>=0&&matrix[row*cols+col]==str[pathLength]&&!flag[row*cols+col]){ pathLength++; flag[row*cols+col]=true; hasPath=hasPathCore(matrix,rows,cols,row,col-1,str,pathLength,flag)|| hasPathCore(matrix,rows,cols,row,col+1,str,pathLength,flag)|| hasPathCore(matrix,rows,cols,row-1,col,str,pathLength,flag)|| hasPathCore(matrix,rows,cols,row+1,col,str,pathLength,flag); if(!hasPath){ pathLength--; flag[row*cols+col]=false; } } return hasPath; }}
阅读全文
0 0
- 面试题66:矩阵中的路径
- 面试题66:矩阵中的路径
- 面试题66:矩阵中的路径
- 《剑指Offer》学习笔记--面试题66:矩阵中的路径
- 【剑指Offer学习】【面试题66:矩阵中的路径】
- 《剑指offer》面试题66 矩阵中的路径
- 剑指offer--面试题66:矩阵中的路径
- 剑指Offer面试题66:矩阵中的路径 java实现
- 剑指offer-面试题66-矩阵中的路径
- 【剑指Offer】面试题66:矩阵中的路径
- 面试题73:矩阵中的路径
- 面试题66. 矩阵中的路径
- Google面试题 3| 矩阵中的最长上升路径
- Google面试题 3| 矩阵中的最长上升路径
- 剑指offer--面试题12:矩阵中的路径
- 【剑指offer】面试题12:矩阵中的路径
- 剑指offer面试题12:矩阵中的路径Java实现版
- 66 - 矩阵中的路径
- STM8S---选项字节(Option Byte)写操作之IO复用
- (转)谷歌编程风格指南_C语言版
- Problem 48 Self powers
- css兼容性
- Intellij IDEA 把普通java工程转为maven工程
- 面试题66:矩阵中的路径
- SQL 2008 R2 数据库操作,不允许保存更改。您所做的更改要求删除并重新创建一下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
- 5.SpringAOP基础
- node.js ——centos爬坑node.js安装、全局环境配置、pm2安装
- java注解型 事务处理
- 绘制星号图----坐标分析法
- TOJ 4078 find the princessI(模拟)
- PHP常用函数有哪些?
- 调通全志R16平台的AP6212A0版本的BT(分色排版)V1.1版本