[剑指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] 矩阵中的路径的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer(C++版本)系列:剑指 Offer 12 矩阵中的路径

剑指offer 矩阵中的路径

java刷题-剑指offer 12 矩阵中的路径

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

算法剑指 Offer 12. 矩阵中的路径

剑指offer:矩阵中的路径