leetcode Minimum Path Sum
题目:还是类似于之前两题,这里给定的m*n矩阵是每个数字都有值的。求的从头到尾的最小sum是多少。还是用动态规划求。初始化的时候是先计算第一行和第一列。假设给定的数据如下:
那么初始化后为:
那么再定位要处理的数字到i=1和j=1处,如表中的数字2处。这个时候更新是更加它加上它的左边或者上边的较小的值。更新一次后为:
一次类推可以将所有的更新完,最后输出grid[m-1][n-1]就可以了。
class Solution { public: int minPathSum(vector<vector<int> > &grid) { //if (grid.size() == 0) return 0; int m = grid.size(), n = grid[0].size(); int i =1, j = 1; while(j<n) { grid[0][j]+=grid[0][j-1]; j++;} while(i<m) { grid[i][0]+=grid[i-1][0]; i++;} i = 1; j = 1; for (; i < m; ++i) for (j =1 ; j < n; ++j) // 记得j重新赋值1 { grid[i][j] += min(grid[i-1][j], grid[i][j-1]); } return grid[m-1][n-1]; } };
2015/03/25:
class Solution { public: int minPathSum(vector<vector<int> > &grid) { if (grid.size() == 0) return 0 ; int m = grid.size(), n = grid[0].size(); for (int i = 1; i < m; ++i) grid[i][0] += grid[i-1][0]; for (int j = 1; j < n; ++j) grid[0][j] += grid[0][j-1]; for (int i = 1; i < m; ++i) for (int j = 1; j < n; ++j){ grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j]; } return grid[m-1][n-1]; } };
python:
class Solution: # @param grid, a list of lists of integers # @return an integer def minPathSum(self, grid): for i in range(1, len(grid)): grid[i][0] += grid[i-1][0] for i in range(1, len(grid[0])): grid[0][i] += grid[0][i-1] for i in range(1, len(grid)): for j in range(1, len(grid[0])): grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j] return grid[len(grid)-1][len(grid[0])-1]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步