题解 | 矩阵的最小路径和
矩阵的最小路径和
https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb
import java.util.*;
public class Solution {
/**
* 矩阵的最小路径和
* 动态规划,问题拆解:
* 1.确定状态:dp[i][j]表示到达(i,j)的最小路径和, 状态转移方程:dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + matrix[i][j]
* 2.初始化:
* if i ==0 && j ==0 dp[0][0] = matrix[0][0];
* if i == 0 dp[i][j] = dp[i-1][j] + matrix[i][j] ;
* if j == 0 dp[i][j] = dp[i][j-1] + matrix[i][j] ;
*/
public int minPathSum(int[][] matrix) {
if (null == matrix || matrix.length == 0 || matrix[0].length == 0) {
return 0;
}
int[][] dp = new int[matrix.length][matrix[0].length];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (i == 0 && j == 0) {
dp[i][j] = matrix[i][j];
continue;
}
if (i == 0) {
dp[i][j] = dp[i][j - 1] + matrix[i][j];
continue;
}
if (j == 0) {
dp[i][j] = dp[i - 1][j] + matrix[i][j];
continue;
}
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j];
}
}
return dp[matrix.length - 1][matrix[0].length - 1];
}
}
