[64]Minimum Path Sum
来源:互联网 发布:怎样举报网络非法赌博 编辑:程序博客网 时间:2024/06/05 15:51
【题目描述】
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.
【思路】1.还是用深搜+记录前面的最小pathsum
2.很明显的动归题目。状态方程为:s(m,n)=min(s(m-1,n),s(m,n-1))+grid(m,n).
3.是对2的改进,采用动归+滚动数组,虽然耗时反而比2多。。
【代码】
1.
class Solution {public: vector<vector<int>> f; int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); this->f=vector<vector<int>>(m,vector<int>(n,-1)); return dfs(grid,m-1,n-1); } int dfs(vector<vector<int>>& grid,int a,int b){ if(a<0||b<0) return INT_MAX; if(a==0&&b==0) return grid[0][0]; return min(updatef(grid,a-1,b),updatef(grid,a,b-1))+grid[a][b]; } int updatef(vector<vector<int>>& grid,int a,int b){ if(a<0||b<0) return INT_MAX; if(f[a][b]>=0) return f[a][b]; f[a][b]=dfs(grid,a,b); return f[a][b]; }};
2.
class Solution {public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector<vector<int>> ans(m,vector<int>(n,0)); ans[0][0]=grid[0][0]; for(int i=1;i<m;i++){ ans[i][0]=grid[i][0]+ans[i-1][0]; } for(int i=1;i<n;i++){ ans[0][i]=grid[0][i]+ans[0][i-1]; } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ ans[i][j]=min(ans[i-1][j],ans[i][j-1])+grid[i][j]; } } return ans[m-1][n-1]; }};
3.
class Solution {public: int minPathSum(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); //vector<vector<int>> ans(m,vector<int>(n,0)); vector<int> ans(n,INT_MAX); ans[0]=0; for(int i=0;i<m;i++){ ans[0]+=grid[i][0]; for(int j=1;j<n;j++){ ans[j]=min(ans[j],ans[j-1])+grid[i][j]; } } return ans[n-1]; }};
0 0
- 64Minimum Path Sum
- 64 Minimum Path Sum
- [64]Minimum Path Sum
- 64-Minimum Path Sum
- LeetCode 64: Minimum Path Sum
- [leetcode 64] Minimum Path Sum
- [LeetCode 64]Minimum Path Sum
- leetcode || 64、Minimum Path Sum
- Minimum Path Sum - LeetCode 64
- Minimum Path Sum leetcode 64
- leetcode-64-Minimum Path Sum
- Leetcode 64(Minimum Path Sum)
- LeetCode(64) Minimum Path Sum
- Leetcode #64 Minimum Path Sum
- leetcode 64: Minimum Path Sum
- Leetcode#64||Minimum Path Sum
- LeetCode 64: Minimum Path Sum
- 【LEETCODE】64-Minimum Path Sum
- 代码整洁之道读书笔记--注释
- C++ Primer Week2
- AsyncTaskLoader2 设计原理大揭底
- 用Python实现一个1加到n求和功能的函数
- Vmware Tools安装出错的解决方法
- [64]Minimum Path Sum
- jaxp解析xml
- oc字符串 和 注意地方
- setLatestEventInfo(),Builder.getNotification()过时,Android提供的解决方案
- 面对电信运营商HTTP劫持如何是好,投诉太折腾,不如路由器直接屏蔽广告源
- 《C++ primer》英文第五版阅读笔记(六)——类型处理
- C++的精髓——虚函数
- php面向对象(一)
- 在github上创建新分支