一切思路尽在代码中,每一步都有详细的介绍
int minPathSum(int** grid, int gridSize, int* gridColSize)
{
int rows = gridSize;
int col = gridColSize[0];
int **dp = (int**)malloc(rows*sizeof(int*));
int i,j;
for(i=0; i<rows; i++)
{
dp[i] = (int*)malloc(col*sizeof(int));
memset(dp[i],0,col);
}
dp[0][0] = grid[0][0];
//第一行的情况,只能由左向右
for(i=1; i<col; i++)
dp[0][i] = dp[0][i-1] + grid[0][i];
//第一列的情况,只能由上到下
for(i=1; i<rows; i++)
dp[i][0] = dp[i-1][0] + grid[i][0];
//其他有两种选择,从左走到右,从上走到下,取两者中的较小者
for(i=1; i<rows; i++)
{
for(j=1; j<col; j++)
{
dp[i][j] = (dp[i-1][j] < dp[i][j-1]?dp[i-1][j]:dp[i][j-1]) + grid[i][j];
}
}
return dp[rows-1][col-1];
}
执行结果: