题解 | #矩阵中的路径#

矩阵中的路径

https://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6

class Solution {
  private:
    bool hasNext(int x, int y, int pathLen, string word,
                 vector<vector<char> >& matrix) {
        /*
        @brief: 在指定位置的元素周围相邻位置找下一个节点
        @param:
            dir: 来的方向 1 从左往右  2 从上往下  3 从右往左 4 从下往上
            wordLen: 当前的长度
        */
        if (pathLen == word.size()) {
            return true;
        }
        if (x < 0 || x >= matrix.size() || y < 0 || y >= matrix[0].size() ||
                matrix[x][y] != word[pathLen]) {
            return false;
        }
        pathLen++;
        char temp = matrix[x][y];  //  回溯
        matrix[x][y] = '#';  //不为26个字母的都可以,用于标记已走过的路径
        bool found = hasNext(x + 1, y, pathLen, word, matrix) ||
                     hasNext(x - 1, y, pathLen, word, matrix) ||
                     hasNext(x, y + 1, pathLen, word, matrix) ||
                     hasNext(x, y - 1, pathLen, word, matrix);
        matrix[x][y] = temp;  // 回溯

        return found;
    }

  public:
    bool hasPath(vector<vector<char> >& matrix, string word) {
        int col = matrix[0].size();
        int row = matrix.size();

        // 为空的判断
        if (matrix.empty() || word.empty()) {
            return false;
        }

        for (int i = 0; i < col; i++) {
            for (int j = 0; j < row; j++) {
                if (matrix[j][i] == word[0]) {
                    if (hasNext(j, i, 0, word, matrix)) return true;
                }
            }
        }
        return false;
    }
};

全部评论

相关推荐

king122:专业技能不要写这么多,熟悉和熟练你经不住问,排版有些难看,中间的空隙搞小一点,项目描述的话感觉是从课程中抄下来的,改一改吧,不然烂大街了,每个项目都写一两点,用什么技术实现了什么难点,然后再写一些数字上去像时间又花了90%这样,这样面试会多一些,如果觉得自己的项目还是不够用的话,我有几个大厂最近做过的实习项目,感兴趣的话可以看我简介中的项目地址
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务