动态规划:
public int minPathSum(int[][] grid) {
int n = grid.length; // 获取网格的行数
int m = grid[0].length; // 获取网格的列数
int[][] dp = new int[n][m]; // 创建一个二维数组用于存储最小路径和
dp[0][0] = grid[0][0]; // 初始化起点的路径和
// 计算第一列每个格子的路径和
for (int i = 1; i < n; i++) {
dp[i][0] = grid[i][0] + dp[i-1][0];
}
// 计算第一行每个格子的路径和
for (int i = 1; i < m; i++) {
dp[0][i] = grid[0][i] + dp[0][i-1];
}
// 计算其余格子的路径和
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + grid[i][j];//保证路径和最小
}
}
return dp[n-1][m-1]; // 返回最右下角格子的路径和作为最小路径和
}