/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix int整型二维数组 the matrix
* @param matrixRowLen int matrix数组行数
* @param matrixColLen int* matrix数组列数
* @return int整型
*/
int minPathSum(int** matrix, int matrixRowLen, int* matrixColLen ) {
// write code here
int row=matrixRowLen;
int col=*matrixColLen;
int dp[row][col];//记录当前位置到出口的最小路径和
memset(dp,0,sizeof(int)*(row*col));
//填充dp表最后一列和最后一行,因为只能!向下或向右走
//测试用例没有row==1||col==1的情况,我就偷懒了
dp[row-1][col-1]=matrix[row-1][col-1];
for(int i=row-2;i>=0;i--){
dp[i][col-1]=dp[i+1][col-1]+matrix[i][col-1];
}
for(int j=col-2;j>=0;j--){
dp[row-1][j]=dp[row-1][j+1]+matrix[row-1][j];
}
//填充剩余dp表
for(int i=row-2;i>=0;i--){
for(int j=col-2;j>=0;j--){
dp[i][j]=matrix[i][j]+(dp[i+1][j]<dp[i][j+1]?dp[i+1][j]:dp[i][j+1]);
}
}
return dp[0][0];
}