class Solution { public int minFallingPathSum(int[][] matrix) { int row,col; int n=matrix.length; for(row=1;row<n;row++){ for(col=0;col<n;col++){ if(col==0){ matrix[row][col]+=Math.min(matrix[row-1][col],matrix[row-1][col+1]); }else if(col==n-1){ matrix[row][col]+=Math.min(matrix[row-1][col-1],matrix[row-1][col]); }else { matrix[row][col]+=Math.min(matrix[row-1][col-1],Math.min(matrix[row-1][col],matrix[row-1][col+1])); } } } int minFallingSum = Integer.MAX_VALUE; for(col=0;col<n;col++){ minFallingSum = Math.min(minFallingSum,matrix[n-1][col]); } return minFallingSum; } } 分析下这段代码
时间: 2024-04-14 14:29:00 浏览: 81
Android Build.VERSION.SDK_INT
这段代码是一个动态规划的解法,用于计算二维矩阵的最小下降路径和。
代码首先定义了变量 row 和 col,用于循环迭代二维矩阵。然后,通过 matrix.length 获取矩阵的行数,并赋值给变量 n。
接下来,使用两个嵌套的 for 循环遍历矩阵的每个元素,从第二行开始计算最小下降路径和。在每个元素上,根据其在矩阵中的位置(col)来选择合适的计算方式。
- 当 col 等于 0 时,只能选择上一行相邻的元素 matrix[row-1][col] 和 matrix[row-1][col+1] 中的较小值,并将其加到当前元素 matrix[row][col] 上。
- 当 col 等于 n-1 时,只能选择上一行相邻的元素 matrix[row-1][col-1] 和 matrix[row-1][col] 中的较小值,并将其加到当前元素 matrix[row][col] 上。
- 其他情况下,可以选择上一行相邻的三个元素 matrix[row-1][col-1]、matrix[row-1][col] 和 matrix[row-1][col+1] 中的最小值,并将其加到当前元素 matrix[row][col] 上。
完成了所有行的计算后,接下来使用一个 for 循环遍历最后一行的元素,并找到最小的路径和,保存在变量 minFallingSum 中。
最后,返回最小路径和 minFallingSum。
这段代码的时间复杂度为 O(n^2),其中 n 是矩阵的边长。它通过动态规划的思想,逐行计算并保存每个位置的最小路径和,最终得到全局的最小路径和。
阅读全文