329. Longest Increasing Path in a Matrix

来源:互联网 发布:数据库like用法 编辑:程序博客网 时间:2024/05/22 13:36
class Solution {private:    int pathHelper(int i,int j,vector<vector<int>> &matrix,vector<vector<int>> &cache)    {            if(cache[i][j]!=0)                return cache[i][j];            int len=0;            int maxlen=0;            if(i>0)            {                if(matrix[i-1][j]>matrix[i][j]) {                    len=pathHelper(i - 1, j, matrix, cache);                    maxlen=max(len,maxlen);                }            }            if(i<matrix.size()-1) {                if(matrix[i+1][j]>matrix[i][j]) {                    len=pathHelper(i + 1, j, matrix, cache);                    maxlen=max(maxlen,len);                }            }            if(j>0) {                if(matrix[i][j-1]>matrix[i][j]) {                    len=pathHelper(i, j - 1, matrix, cache);                    maxlen=max(maxlen,len);                }            }            if(j<matrix[0].size()-1) {                if(matrix[i][j+1]>matrix[i][j]) {                    len=pathHelper(i, j + 1, matrix, cache);                    maxlen=max(maxlen,len);                }            }            maxlen=maxlen+1;            cache[i][j]=maxlen;            return maxlen;    }public:    int longestIncreasingPath(vector<vector<int>>& matrix) {        int n=matrix.size();        if(n==0)            return 0;        int m=matrix[0].size();        if(m==0)            return 0;        int maxpath=0;        vector<vector<int>> cache(n,vector<int>(m,0));        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)            {                int len=pathHelper(i,j,matrix,cache);                maxpath=max(len,maxpath);            }        return maxpath;    }};
1 0
原创粉丝点击