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

矩阵中的最长递增路径

题目

在这里插入图片描述

思路

记忆化搜索,第一次接触,参考Java答案后,自己写的C++,dfs函数数组要用&,超内存很多次。

代码

class Solution {
public:
    int dx[4]={0,1,0,-1};
    int dy[4]={1,0,-1,0};
    int n,m,x,y;
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        n=matrix.size();
        if(!n) return 0;
        m=matrix[0].size();
        if(!m) return 0;
        vector<vector<int> > mp(n,vector<int>(m,0));
        int ans=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(mp[i][j]) continue;
                ans=max(ans,dfs(matrix,i,j,mp));
            }
        return ans;
    }
    int dfs(vector<vector<int> > &matrix,int i,int j,vector<vector<int> > &mp) {
        if(mp[i][j]) return mp[i][j];
        for(int k=0;k<4;k++)
        {
            x=i+dx[k];
            y=j+dy[k];
            if(x>=0&&x<n&&y>=0&&y<m&&matrix[x][y]>matrix[i][j])
                mp[i][j]=max(mp[i][j],dfs(matrix,x,y,mp));
        }
        return ++mp[i][j];
    }
};

发布了173 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/shidonghang/article/details/103154078