矩阵中的最长递增路径
题目
思路
记忆化搜索,第一次接触,参考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];
}
};