题解 | #矩阵最长递增路径#

矩阵最长递增路径

https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2

class Solution {
  public:

    bool isBound(int x, int y, int n, int m) {
        if (x < 0 || x > n - 1 || y < 0 || y > m - 1) {
            return false;
        }
        return true;
    }

    int dx[4] = { 0, 0, 1, -1 };
    int dy[4] = { 1, -1, 0, 0 };


    int recursion(int x, int y, vector<vector<int> >& matrix,
                  vector<vector<int>>& mark) {
        if (mark[x][y] != 0)
            return mark[x][y];
        int cmax = 0;
        for (int i = 0; i < 4; i++) {
            int tx = x + dx[i];
            int ty = y + dy[i];
            if (isBound(tx, ty, matrix.size(), matrix[0].size())) {
                if (matrix[x][y] < matrix[tx][ty]) {
                    cmax = max(cmax, recursion(tx, ty, matrix, mark));
                    recursion(tx, ty, matrix, mark);
                }
            }
        }
        mark[x][y] = cmax + 1;
        return cmax + 1;
    }

    int solve(vector<vector<int> >& matrix) {
        // write code here
        int max = 0;
        vector<vector<int>> mark(matrix.size(), vector<int> (matrix[0].size(), 0));
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < matrix[i].size(); j++) {
                if (recursion(i, j, matrix, mark) > max) {
                    max = recursion(i, j, matrix, mark);
                }
            }
        }
        return max;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务