class Solution {
public:
    /**
     * 
     * @param matrix int整型vector<vector<>> the matrix
     * @return int整型
     */
    int minPathSum(vector<vector<int> >& matrix) {
        // write code here
        int n = matrix.size();
        int m = matrix[0].size();
        int i ,j;
        for( i = 0;i<n;i++)
        {
            for(j = 0;j<m;j++)//循环来遍历数组,将原来数组的值,一一改变,极大减少空间的消耗
            {
                if(i==0&&j!=0)//当数组是第一行的时候
                {
                    matrix[0][j] +=matrix[0][j-1];
                }
                else if(j==0&&i!=0)//当数组是第一列的时候
                {
                    matrix[i][0] += matrix[i-1][0];
                }
                else if(i!=0&&j!=0)//当数组不再第一列以及不再第一行的时候
                {
                    matrix[i][j] += min(matrix[i-1][j],matrix[i][j-1]);

                }
            }
        }
        return matrix[n-1][m-1];//返回 是最后一个元素的值,就是矩阵最小的路径和
    }
};