题解 | 矩阵的最小路径和
矩阵的最小路径和
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]; } }