题目链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/
题解:
一开始想的是枚举起点然后跑BFS,这样时间复杂度为o(n^2m^2),不太好。感觉官方题解的方法很秒,记忆化搜索,时间复杂度为O(nm),简单的介绍一下官方的思路,同样的,枚举每个起点,然后引入一个记忆化数组,如果这个点访问过了,直接返回该点对应的值,如果没有访问过,那么就访问该点的四个方向........代码还是比较好理解的。
class Solution { int dp[1000+7][1000+7]; int direction[4][2]={{1,0},{0,1},{0,-1},{-1,0}}; 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 ans=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ ans=max(ans,dfs(matrix,i,j,n,m)); } } return ans; } int dfs(vector<vector<int >>&matrix,int x,int y,int n,int m){ if(dp[x][y]) return dp[x][y]; dp[x][y]=1; for(int i=0;i<4;i++){ int dx=x+direction[i][0]; int dy=y+direction[i][1]; if(dx<0||dy<0||dx>=n||dy>=m||matrix[dx][dy]<=matrix[x][y]) continue ; dp[x][y]=max(dp[x][y],dfs(matrix,dx,dy,n,m)+1); } return dp[x][y]; } };