码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-15 20:53:29      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:code   long   递增   false   etc   class   移动   pat   输出   

题目要求:

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

示例:

输入: 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];   
    }
};

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

标签:code   long   递增   false   etc   class   移动   pat   输出   

原文地址:https://www.cnblogs.com/leyang2019/p/11680086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!