LeetCode. 矩阵中的最长递增路径

题目要求:

给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。

示例:

输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为 [1, 2, 6, 9]。


class Solution {
public:
    int dx[5] = {-1, 0, 1, 0};
    int dy[5] = {0, 1, 0, -1};
   
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        if(matrix.empty()) return 0;
        int max1 = 0;
        vector<vector<bool>> visited(matrix.size()+1, vector<bool>(matrix[0].size()+1, false));
        vector<vector<int>> len(matrix.size()+1, vector<int>(matrix[0].size()+1, 0));
        for(int i = 0; i < matrix.size(); i++) {
            for(int j = 0; j < matrix[0].size(); j++) {
                max1 = max(max1, find(matrix, visited, len, i, j));
            }
        }
        return max1;
    }
    
    int find(vector<vector<int>> matrix, vector<vector<bool>> visited, vector<vector<int>> len, int x, int y) {
        if(visited[x][y]) {
            return len[x][y];
        }
        len[x][y] = 1;
        for(int i = 0; i < 4; i++) {
            int _x = dx[i] + x;
            int _y = dy[i] + y;
            if(_x >= 0 && _x < matrix.size() && _y >= 0 && _y < matrix.size() && matrix[_x][_y] < matrix[x][y]) {
                len[x][y] = max(len[x][y], find(matrix, visited, len, _x, _y) + 1);
            }
        }
        visited[x][y] = true;
        return len[x][y];   
    }
};
posted @ 2019-10-15 20:20  Howardwang  阅读(570)  评论(0编辑  收藏  举报