329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
示例 1:
输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为 [1, 2, 6, 9]。
示例 2:
输入: nums =
[
[3,4,5],
[3,2,6],
[2,2,1]
]
输出: 4
解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
通过次数19,623提交次数45,557
class Solution {
int cnt = 0;
int[][]dirs = {{0,1},{0,-1},{1,0},{-1,0}};
public int longestIncreasingPath(int[][] matrix) {
if(matrix.length==0 || matrix[0]==null) return 0;
int m = matrix.length;//行
int n = matrix[0].length;//列
int [][] memo = new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
dfs(matrix,m,n,i,j,memo);
}
}
return cnt;
}
private int dfs(int[][] matrix,int m,int n, int i, int j,int [][] memo){
if(memo[i][j]!=0){
if(memo[i][j]>cnt) cnt=memo[i][j];
return memo[i][j];
}
memo[i][j]++;
for(int[] dir : dirs){
int newrow = i+dir[0];
int newcolumn = j+dir[1];
if(newrow>=0 && newrow<m && newcolumn>=0 && newcolumn<n && matrix[newrow][newcolumn]>matrix[i][j]){
memo[i][j] = Math.max(memo[i][j], dfs(matrix,m,n,newrow,newcolumn,memo)+1);
}
}
if(memo[i][j]>cnt) cnt=memo[i][j];
return memo[i][j];
}
}
原文:https://www.cnblogs.com/athony/p/13379590.html