int minPathSum(int** grid, int gridRowSize, int gridColSize) {
int i, j;
if(gridRowSize == 0 || gridColSize == 0) return 0;
else if(gridRowSize == 1){
int sum = 0;
for(j = 0; j < gridColSize; ++j) sum += grid[0][j];
return sum;
}
else if(gridColSize == 1){
int sum = 0;
for(i = 0; i < gridRowSize; ++i) sum += grid[i][0];
return sum;
}
else{
for(i = gridRowSize - 2; i >= 0; --i) grid[i][gridColSize - 1] += grid[i + 1][gridColSize - 1];
for(j = gridColSize - 2; j >= 0; --j) grid[gridRowSize - 1][j] += grid[gridRowSize - 1][j + 1];
for(i = gridRowSize - 2; i >= 0; --i)
for(j = gridColSize - 2; j >= 0; --j){
grid[i][j] += grid[i + 1][j] < grid[i][j + 1] ? grid[i + 1][j] : grid[i][j + 1];
}
return grid[0][0];
}
}
int i, j;
if(gridRowSize == 0 || gridColSize == 0) return 0;
else if(gridRowSize == 1){
int sum = 0;
for(j = 0; j < gridColSize; ++j) sum += grid[0][j];
return sum;
}
else if(gridColSize == 1){
int sum = 0;
for(i = 0; i < gridRowSize; ++i) sum += grid[i][0];
return sum;
}
else{
for(i = gridRowSize - 2; i >= 0; --i) grid[i][gridColSize - 1] += grid[i + 1][gridColSize - 1];
for(j = gridColSize - 2; j >= 0; --j) grid[gridRowSize - 1][j] += grid[gridRowSize - 1][j + 1];
for(i = gridRowSize - 2; i >= 0; --i)
for(j = gridColSize - 2; j >= 0; --j){
grid[i][j] += grid[i + 1][j] < grid[i][j + 1] ? grid[i + 1][j] : grid[i][j + 1];
}
return grid[0][0];
}
}