【问题】给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:

[
[,,],
[,,],
[,,]
]
输出:
解释: 因为路径 →→→→ 的总和最小。

解题思路:

这道题目也是一个经典的动态规划题目,首先题目中说明了:每次只能向下走或者向右移动一步,因此我们可以建立一个dp矩阵,大小为m行n列,其中dp[i][j]表示从左上角[0][0]位置到[i][j]位置的最小路径和。因此我们可以得到递推式为:

dp[i][j]=min(dp[i-1][j], dp[i][j-1])+grid[i][j]

注意i=0或者j=0时,即第一行或者第一列,数组会越界,因此需要进行判断。对于i=0的情况:dp[i][j]=dp[i][j-1]+grid[i][j], j=0的情况同理可得!
当我们得到递推式以后,就可以很快的写出代码了,主要是注意不要越界就好了,并且由于我们代码循环中没有判断i,j同时为零的情况,因此需要对其进行初始化!

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[].size();
vector<vector<int>> dp(m, vector<int>(n, ));
dp[][] = grid[][];
for(int i = ; i < m; i++){
for(int j = ;j < n; j++){
if(i == && j != ) dp[i][j] = dp[i][j-] + grid[i][j];
if(i != && j == ) dp[i][j] = dp[i-][j] + grid[i][j];
if(i != && j != ){
dp[i][j] = min(dp[i-][j], dp[i][j-]) + grid[i][j];
}
}
}
return dp[m-][n-];
}
};

同时,我们可以将上面的代码进行优化处理,不使用额外的空间dp矩阵,而是将dp矩阵建立在原数据grid上,但我以为这样会改变原数据,工程中不可以,但优化空间还是OK的!

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[].size();
for(int i = ; i < m;i++){
for(int j = ; j < n;j++){
if(i == && j != ) grid[i][j] += grid[i][j-];
if(i != && j == ) grid[i][j] += grid[i-][j];
if(i * j != )
grid[i][j] += min(grid[i][j-], grid[i-][j]);
}
}
return grid[m-][n-];
}
};

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之5、ABP启动配置
  2. 关于 Xcode8打印JSON的时候,NSLog控制台显示不完整
  3. IDE警告信息不应该被忽略
  4. 高阶函数复习:利用reduce和map把字符串转为数字
  5. 尽可能使用 const
  6. js onchange事件
  7. Js 简单分页(二)
  8. android十六进制颜色代码转换为int类型数值
  9. 用 Java 技术创建 RESTful Web 服务--转载
  10. #ifndef #define #endif 防止头文件被重复引用
  11. 基于Visual C++2013拆解世界五百强面试题--题9-找出所有的排列方式
  12. 为什么MVC不是一种设计模式(转)
  13. java中HashMap详解(转)
  14. Consul文档简要整理
  15. [2012-04-25]shell大括号参数扩展(Parameter Expansion)
  16. Selenium爬取电影网页写成csv文件
  17. Python入门 日志打印
  18. 20165304《Java程序设计》第七周学习总结
  19. PR(Precision-Recall)曲线和mAP指标
  20. 20155235 《网络攻防》 实验九 Web安全基础

热门文章

  1. Unity初识项目结构与面板
  2. 「牛客CSP-S2019赛前集训营1」仓鼠的石子游戏
  3. 2017 青岛网络赛 Chenchen, Tangtang and ZengZeng
  4. 小程序列表循环出来的list是不同接口赋的值
  5. P1071 小赌怡情
  6. P1075 链表元素分类
  7. 单片机ADC检测4-20mA电路,以及计算方法
  8. exchange 强制更新全球通讯簿
  9. 安装数据库Typical path for xclock: /usr/X11R6/bin/xclock 错误问题
  10. 2. react 简书 头部(header) 图标添加