大概就是把每一个点的最长递增或者递减值记录在一个二维数组里面,具体看代码
class Solution {
public:
vector<vector<int>> state;
int n;
int m;
int dfs(int i,int j,vector<vector<int>>& matrix){
if(state[i][j]!=0) return state[i][j]; //如果已经有状态 直接返回不需要搜索
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int mmax=0;
for(int k=0;k<4;k++){
int x=i+dx[k];
int y=j+dy[k];
if(x<0||x>=n||y<0||y>=m) continue; //判断边界
if(matrix[i][j]<matrix[x][y]) //这个的大于小于 都是可以的
mmax=max(mmax,dfs(x,y,matrix));
}
state[i][j]=mmax+1;
return state[i][j];
}
int longestIncreasingPath(vector<vector<int>>& matrix) {
n=matrix.size();
if(n==0) return 0;
m=matrix[0].size();
state=vector<vector<int>>(n,vector<int>(m,0));
int answer=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
answer=max(answer,dfs(i,j,matrix)); //每一点作为起点来搜索
return answer;
}
};