剑指 Offer II 099. 最小路径之和

  1. class Solution {
  2. public int minPathSum(int[][] grid) {
  3. if (grid == null || grid.length == 0 && grid[0].length == 0) return 0;
  4. int row = grid.length, col = grid[0].length;
  5. // dp[i][j] 表示走到 [i][j] 总和最小的值
  6. int[] dp = new int[col];
  7. // base case
  8. dp[0] = grid[0][0];
  9. for (int i = 1; i < col; i++) {
  10. dp[i] = dp[i - 1] + grid[0][i];
  11. }
  12. for (int i = 1; i < row; i++) {
  13. for (int j = 0; j < col; j++) {
  14. if (j == 0) {
  15. dp[j] += grid[i][j];
  16. } else {
  17. dp[j] = Math.min(dp[j], dp[j - 1]) + grid[i][j];
  18. }
  19. }
  20. }
  21. return dp[col - 1];
  22. }
  23. }