# 矩阵中的最长递增路径

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能对角线 方向上移动或移动到 边界外(即不允许环绕)。

 

示例 1:

输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4 
解释:最长递增路径为 [1, 2, 6, 9]

示例 2:

输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]
输出:4 
解释:最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

示例 3:

输入:matrix = [[1]]
输出:1

 

提示:

## template ```cpp #include using namespace std; class Solution { public: static constexpr int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int m, n; int longestIncreasingPath(vector> &matrix) { if (matrix.size() == 0 || matrix[0].size() == 0) { return 0; } m = matrix.size(); n = matrix[0].size(); int res = 0; auto memo = vector>(m, vector(n, 0)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (memo[i][j]) res = max(res, memo[i][j]); else res = max(res, dfs(i, j, matrix, memo)); } } return res; } int dfs(int i, int j, vector> &matrix, vector> &memo) { int temp = 1; for (int k = 0; k < 4; ++k) { int x = i + dirs[k][0]; int y = j + dirs[k][1]; if ((x >= 0) && (x < m) && (y >= 0) && (y < n) && (matrix[i][j] < matrix[x][y])) { if (memo[x][y]) temp = max(temp, memo[x][y] + 1); else temp = max(temp, dfs(x, y, matrix, memo) + 1); } } memo[i][j] = temp; return temp; } }; ``` ## 答案 ```cpp ``` ## 选项 ### A ```cpp ``` ### B ```cpp ``` ### C ```cpp ```