给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
int minPathSum(vector<vector<int>>& grid) {
for(int i=0,leni=grid.size();i<leni;++i)
for(int j=0,lenj=grid[0].size();j<lenj;++j){ //开始把所有元素遍历一次,下面就是分情况了
if(i==0&&j!=0) grid[i][j] += grid[i][j-1]; //如果遍历到矩阵阵顶的元素,那就只能往右走咯,所以后一个元素与前一个元素相加
else if(i!=0&&j==0) grid[i][j] += grid[i-1][j];//如果遍历到矩阵最左的元素,那只能往下走咯,所以下面一个元素和上面一个元素相加
else if(i!=0&&j!=0) grid[i][j] += grid[i-1][j] < grid[i][j-1] ? grid[i-1][j] : grid[i][j-1]; //不是最上面也不是最左边的元素,有可能从上面来也有可能从左边来,那就取两者之间的最小值
}
return grid[grid.size()-1][grid[0].size()-1];//最后返回右下角的元素就是答案
}
原文:https://www.cnblogs.com/Joy2013Ru/p/13627234.html