方法一:记忆化dfs
class Solution {
private:
vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}}; //四个搜索方向
int rows,cols;
int dfs(vector<vector<int>>& matrix,int i,int j,vector<vector<int>>& cache){
if(cache[i][j]!=0)
return cache[i][j];
for(auto d:dirs){
int x=i+d[0],y=j+d[1];
if(0<=x && x<m && 0<=y && y<n && matrix[x][y]>matrix[i][j])
cache[i][j]=max(cache[i][j],dfs(matrix,x,y,cache));
}
return ++cache[i][j];
}
public:
int longestIncreasingPath(vector<vector<int>>& matrix) {
if(matrix.empty()) return 0;
rows=matrix.size(),cols=matrix[0].size();
vector<vector<int>> cache(rows,vector<int>(cols));
int res=0;
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
res=max(res,dfs(matrix,i,j,cache));
return res;
}
};