[剑指offer] 矩阵中的路径
Posted sqqq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer] 矩阵中的路径相关的知识,希望对你有一定的参考价值。
题目
https://www.acwing.com/problem/content/21/
思路
枚举。枚举起点,枚举四个方向。
时间复杂度:设矩阵n行m列,要匹配的字符串长k,O(nm*3^k)。
Java代码
class Solution
int[] dx = new int[]-1, 0, 1, 0;
int[] dy = new int[]0, 1, 0, -1;
public boolean hasPath(char[][] matrix, String str)
for(int i=0; i<matrix.length; i++)
for(int j=0; j<matrix[0].length; j++)
if(dfs(matrix, str, 0, i, j))
return true;
return false;
private boolean dfs(char[][] matrix, String str, int k, int x, int y)
char c = matrix[x][y];
//if(k == str.length()) return true;
//if(matrix[x][y] != str.charAt(k)) return false; //注意这两行这样写不行,‘a’不能通过,因为不会进入下面的递归
if(c != str.charAt(k)) return false;
if(k == str.length()-1) return true;
matrix[x][y] = '*';
for(int i=0; i<4; i++)
int a = x+dx[i], b = y+dy[i];
if(a>=0 && a<matrix.length && b>=0 && b<matrix[0].length)
if(dfs(matrix, str, k+1, a, b))
return true;
matrix[x][y] = c;
return false;
注意:在下一层递归之前,需要把当前字符做一个特殊标记(上述代码用*号代替),防止再次遍历;在结束递归之后,把当前字符还原。
参考
https://www.acwing.com/solution/AcWing/content/728/
以上是关于[剑指offer] 矩阵中的路径的主要内容,如果未能解决你的问题,请参考以下文章