题解 | #矩阵的最小路径和#
矩阵的最小路径和
http://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb
import java.util.*;
public class Solution {
/**
*
* @param matrix int整型二维数组 the matrix
* @return int整型
*/
public int minPathSum (int[][] matrix) {
// write code here
// if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0){
// return 0;
// }
// int row = matrix.length;
// int col = matrix[0].length;
// // 创建同样大小的dp数组
// int[][] dp = new int[row][col];
// dp[0][0] = matrix[0][0];
// // 第一列补全
// for(int i = 1; i < row; i++){
// dp[i][0] = matrix[i][0] + dp[i - 1][0];
// }
// // 第一行补全
// for(int j = 1; j < col; j++){
// dp[0][j] = matrix[0][j] + dp[0][j - 1];
// }
// for(int i = 1; i < row; i++){
// for(int j = 1; j < col; j++){
// dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j];
// }
// }
// return dp[row - 1][col - 1];
if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0){
return 0;
}
int row = matrix.length;
int col = matrix[0].length;
// 观察后只需要一行空间大小的数组进行循环表示,避免多次的枚举行为。
int[] dp = new int[col];
dp[0] = matrix[0][0];
for(int j = 1; j < col; j++){
dp[j] = matrix[0][j] + dp[j - 1];
}
for(int i = 1; i < row; i++){
dp[0] += matrix[i][0];
for(int j = 1; j < col; j++){
dp[j] = Math.min(dp[j], dp[j - 1]) + matrix[i][j];
}
}
return dp[col - 1];
}
}
查看12道真题和解析