剑指offer65-矩阵中的路径

矩阵中的路径

https://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?tpId=13&tqId=11218&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

图片说明

很久不做这种深度优先遍历和广度优先遍历的题目,有点眼生。后面几道题目应该都是和深度优先遍历和广度优先遍历有关的题目,这种题目就不能再依靠高级数据结构的思想来帮助我们解决问题,要纯靠自己的思维能力来进行解决了。

这道题目自己的思维局限是没有理解广度优先遍历要掌握的诀窍导致写代码的时候出现了死循环,而且有一个误区是,如果当前节点和路径上的下一个节点不相等时,此时我要不要直接返回false断绝此路径上继续下探的可能,答案是要,因为只有这样找到的路径才是连续的正确的。
还有一个疑问是我擅自在代码中写了如果当前节点和路径上的下一个节点不相等时,并且匹配的是第一个字符时,就允许范围其周围的节点进行结果遍历,但是这样会导致当第一个字符和0,0坐标不匹配时代码陷入死循环,因此是错误的,所以还是要老实使用下面的遍历方法。

public class Solution {
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
            int[] flag = new int[rows * cols];
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    if (help(matrix, rows, cols, str, 0, flag, i, j))
                        return true;
                }
            }
            return false;


        }

    public boolean help(char[] matrix, int rows, int cols, char[] str, int cur, int[] flag, int r, int c) {
            //int row, int col表明当前的坐标的行列值
            //flag表明那些曾经在路径中出现过的节点的坐标
            //cur表示当前需要匹配的字符的位置,是下一个待访问的节点

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
请问return false上面的flag[index] = 0;是什么作用?(我一开始以为是矩阵中存在重复的数字 但我把 flag[index] =1放到上下左右判断条件里却不对了 求教 )
点赞
送花
回复
分享
发布于 2021-01-31 13:35

相关推荐

10 收藏 评论
分享
牛客网
牛客企业服务