leetcode-329. Longest Increasing Path in a Matrix

来源:互联网 发布:项目经理考试软件app 编辑:程序博客网 时间:2024/06/18 17:04

考察点:dfs,dp,memory;
思路:遍历每个节点,用dp存储该节点的最长值;dfs函数返回该节点的最长值,dfs里,如果已经存储,就直接返回,否则就四个方向依次遍历,如果比它小就放弃这条路;最后得出结果就返回最大的。
C++代码:

class Solution {public:    vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}};    int longestIncreasingPath(vector<vector<int>>& matrix) {        if (matrix.size()==0 || matrix[0].size()==0)            return 0;        int m = matrix.size();        int n = matrix[0].size();        int ret = 1;        vector<vector<int>> dp(m, vector<int>(n, 0));        for (int i=0; i<m; i++) {            for (int j=0; j<n; j++) {                int temp = dfs(matrix,dp,i,j, m, n);                ret = max(ret, temp);            }        }        return ret;    }    int dfs(vector<vector<int>>& matrix, vector<vector<int>>& dp, int i, int j, int m, int n) {        if (dp[i][j] != 0)            return dp[i][j];        int max1 = 1;        for (auto dir : dirs) {            int x = i + dir[0];            int y = j + dir[1];            if (x<0 || x >=m || y<0 || y>=n || matrix[x][y] <= matrix[i][j])                continue;            int len = 1 + dfs(matrix, dp, x, y, m , n);            max1 = max(max1, len);        }        dp[i][j] = max1;        return max1;    }};
0 0
原创粉丝点击