矩阵的最小路径和
刚才刷算法题遇见这样一道题
给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。
示例
这题解题思路很是很清晰的:
1.首先新数组第一行和第一列的数据肯定是确定的,都是这个数据加上前面的数据的和(当前数据都是当前数据加上前一个数据,就是和)
2.其余的(从第二列第二个数据开始)后面的数据都是根据左边或者上方最小的部分加来的,这些节点都是当前值加上上方或者左方节点
public int minPathSum (int[][] matrix) {
// write code here
int m = matrix.length;
int n = matrix[0].length;
int[][] result = new int[m][n]; //创建一个一样的二维数组存放结果
result[0][0] = matrix[0][0]; //第一行第一列数字
//第一行的数据
for(int i = 1;i < n;i++){
result[0][i] = result[0][i-1] + matrix[0][i];
}
//第一列的数据
for(int i = 1;i < m;i++){
result[i][0] = result[i-1][0] + matrix[i][0];
}
//从第二行第二个的数据来源都是上方或者左方向,我们只需要计算他们和最小值求出
for(int i = 1;i < m;i++){
for(int j = 1;j < n;j++){
result[i][j] = matrix[i][j]+Math.min(result[i][j-1],result[i-1][j]);
}
}
return result[m-1][n-1];//二维数组最后一个数字就是最短距离
}
本文来自博客园,作者:Diamond-fz,转载请注明原文链接:https://www.cnblogs.com/fzstudy/p/14661916.html