class Solution { public int minPathSum(int[][] grid) { if (grid == null || grid.length == 0 && grid[0].length == 0) return 0; int row = grid.length, col = grid[0].length; // dp[i][j] 表示走到 [i][j] 总和最小的值 int[] dp = new int[col]; // base case dp[0] = grid[0][0]; for (int i = 1; i < col; i++) { dp[i] = dp[i - 1] + grid[0][i]; } for (int i = 1; i < row; i++) { for (int j = 0; j < col; j++) { if (j == 0) { dp[j] += grid[i][j]; } else { dp[j] = Math.min(dp[j], dp[j - 1]) + grid[i][j]; } } } return dp[col - 1]; }}