1、为了节省空间,就不专门建二维数组存储路径和,而直接在原数组中记录,将每个位置的权值改为到该位置的最短路径。
2、先处理首行,每个位置只可能从左边来,route[0][i]=route[0][i]+route[0][i-1],即从第二个位置开始均要加上前面位置的路径。
3、然后处理首列,每个位置只可能从上面走来,route[j][0]=rou[j][0]+route[j-1][0],即从第二个位置开始均要加上上面位置的路径。
4、最后双重循环处理每行其他位置,均为该位置的权值+min(上面,左边)。
int minPathSum(int** matrix, int matrixRowLen, int* matrixColLen ) {
    int row = matrixRowLen;  //行数
    int col = *matrixColLen;   //列数
    int i = 0, j = 0;
    for(j = 1; j < col; j++)
        matrix[0][j] = matrix[0][j] + matrix[0][j-1];  //处理首行
    for(i = 1; i < row; i++)
        matrix[i][0] = matrix[i][0] + matrix[i-1][0];   //处理首列
    for(i = 1; i < row; i++){
        for(j = 1; j < col; j++){
            int min_x  = min(matrix[i-1][j], matrix[i][j-1]);
            matrix[i][j] += min_x;
        }
    }
    return matrix[row-1][col-1]; 
}