动态规划:f[i][j]表示从(0,0)走到(i,j)的最小路径和。状态转移:情况1从上方来到,即f[i-1][j],情况2从左边来到,即f[i][j-1],两者取最小值。原地操作来节省内存,这样需要记录matrix[i][j]的值。

import java.util.*;


public class Solution {
    /**
     * 
     * @param matrix int整型二维数组 the matrix
     * @return int整型
     */
    public int minPathSum (int[][] matrix) {
        // write code here
        int n = matrix.length, m = matrix[0].length;
        for(int i = 0;i < n;i++) {
            for(int j = 0;j < m;j++) {
                int x = matrix[i][j];
                if(i - 1 >= 0) {
                    matrix[i][j] = matrix[i-1][j] + x;
                }
                if(j - 1 >= 0) {
                    if(matrix[i][j] > x) {
                        matrix[i][j] = Math.min(matrix[i][j],matrix[i][j-1] + x);
                    } else {
                        matrix[i][j] = matrix[i][j-1] + x;
                    }
                }
            }
        }
        return matrix[n-1][m-1];
    }
}