矩阵中的最长递增路径
给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。
输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4
解释:最长递增路径为 [1, 2, 6, 9]。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-increasing-path-in-a-matrix
class Solution {
public:
int memo[205][205]; // 建立了一个全局数组用做记忆化,也可以以函数参数的形式传递
int dfs(int x,int y,vector<vector<int>>& m){ // 传引用要快很多很多
if(memo[x][y] != 0){ return memo[x][y];} // 为 0 代表没有访问过这个点
int m_ = m.size() - 1;int n_ = m[0].size() - 1;
int dx[4] = {0,0,-1,1};int dy[4] = {-1,1,0,0}; //四个方向
memo[x][y]++; //最小长度为 1
for(int i = 0 ;i<= 3 ;i++){
int newX = x + dx[i];int newY = y + dy[i];
if(newX >= 0 && newX <= m_ && newY >= 0 && newY <= n_ && m[newX][newY] > m[x][y]){
memo[x][y] = max(memo[x][y] ,1 + dfs(newX,newY,m));
}
}
return memo[x][y];
}
int longestIncreasingPath(vector<vector<int>>& matrix) {
int m = matrix.size() - 1;
int n = matrix[0].size() - 1;
int max_ = 0;int count = 0 ;
for(int i = 0 ;i<= m ;i++){
for(int j = 0;j<= n; j++){
if(memo[i][j] != 0 ) count = memo[i][j];
else count = dfs(i,j,matrix);
if( count > max_) max_ = count;
}
}
return max_;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~