题目描述:
    image.png
    image.png

    1. class Solution {
    2. public int minPathSum(int[][] grid) {
    3. //dp 从左上到右下依次填dp数组
    4. int m = grid.length, n = grid[0].length;
    5. int[][] dp = new int[m][n];
    6. dp[0][0] = grid[0][0];
    7. for (int i = 1; i < n; i++) {
    8. dp[0][i] = dp[0][i - 1] + grid[0][i];
    9. }
    10. for (int i = 1; i < m; i++) {
    11. dp[i][0] = dp[i - 1][0] + grid[i][0];
    12. }
    13. int currRow = 1, currColum = 1;
    14. while (currRow < m) {
    15. dp[currRow][currColum] = Math.min(dp[currRow][currColum - 1], dp[currRow - 1][currColum]) + grid[currRow][currColum];
    16. currColum++;
    17. if (currColum >= n) {
    18. currRow++;
    19. currColum = 1;
    20. }
    21. }
    22. return dp[m - 1][n - 1];
    23. }
    24. }