Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
分析
此题与62. Unique Paths比较相似,也是只能向下或者向右走。
递推公式:
f(x,y)=min(f(x−1,y),f(x,y−1))+grid[x][y];
代码
此题并不需要额外开辟空间,利用二维数组本身即可。
int min(int a,int b){
return a>b?b:a;
}
int minPathSum(int** grid, int gridRowSize, int gridColSize) {
//判断参数合理性,略
for(int i=1;i<gridColSize;i++){
grid[0][i]+=grid[0][i-1];
}
for(int i=1;i<gridRowSize;i++){
grid[i][0]+=grid[i-1][0];
}
for(int i=1;i<gridRowSize;i++){
for(int j=1;j<gridColSize;j++){
grid[i][j]+=min(grid[i-1][j],grid[i][j-1]);
}
}
return grid[gridRowSize-1][gridColSize-1];
}
代码分析
时间复杂度O(m*n);
空间复杂度O(1);