题解 | #矩阵中的路径#

矩阵中的路径

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;
    }
};

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务