【发布时间】:2020-03-06 03:29:28
【问题描述】:
我正在实现 leetcode 的最长递增路径问题。
给定一个整数矩阵,求最长递增路径的长度。
您可以从每个单元格移动到四个方向:左、右、上或下。您不得沿对角线移动或移出边界(即不允许环绕)。
示例 1:
输入:nums = [ [9,9,4], [6,6,8], [2,1,1] ] 输出:4 解释:最长的递增路径是[1, 2, 6, 9]。
所以下面是我的实现尝试了很多递归,但无法理解为什么它没有给出正确的结果,为什么 maxDist 在这个例子中从 4 减少到 3 到 2,因为这个变量是全局的而不是局部的。
public class LongestIncreasingPath {
private static final int[][] dirs = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };
private int m, n;
int maxDist;
public int longestIncreasingPath(int[][] matrix) {
if (matrix.length == 0)
return 0;
m = matrix.length;
n = matrix[0].length;
int ans = 1;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j) {
dfs(matrix, i, j, 1);
ans = Math.max(ans, maxDist);
}
return ans;
}
private int dfs(int[][] matrix, int i, int j, int dist) {
for (int[] 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]) {
maxDist = Math.max(maxDist, dfs(matrix, x, y, dist+1));
}
}
return dist;
}
public static void main(String[] args) {
int[][] nums = { { 9, 9, 4 }, { 6, 6, 8 }, { 2, 1, 1 } };
LongestIncreasingPath lIP = new LongestIncreasingPath();
System.out.println(lIP.longestIncreasingPath(nums));
}
}
【问题讨论】:
标签: java recursion depth-first-search