Minimum Path Sum
来源:互联网 发布:电影资源知乎 编辑:程序博客网 时间:2024/06/07 16:08
题目:
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.
题目意思:
一个m x n 的网格,每个格子里有一个非负整数,找到一条从左上角到右下角的路径,使其经过的格子数值之和最小,每一步只能向右或向下。
’
解题思路:
本题我们首先可以找出递推关系,比如设存放起点到每个格子 i,j 的最小路径和的二维数组为 MPS[i][j],那么递推公式为:
MPS[i][j] = Min(MPS[i-1][j],MPS[i][j-1])+ val[i][j];
即格子 i,j 的MPS值可能有两个来源:其左侧格子 i,j-1 或者其上侧格子 i-1,j ;取这两个来源的较小MPS值,再加上当前格子的值 val[i][j] 即为结果。
由于是从左上方向右下方走,故我们可以利用一个双重循环来进行迭代计算,外层循环以行为单位,内层循环以列为单位,这样可以利用已经计算好的阶段 、
状态来计算当前格子的结果。
代码如下:
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
if(grid.size()==0)
return 0;
vector<vector<int>> res(grid);
int i, j;
for(int j=1; j<res[0].size(); ++j){
res[0][j] += res[0][j-1];
}
for(int j=1; j<res.size(); ++j){
res[j][0] += res[j-1][0];
}
for(i=1; i<res.size(); ++i){
for(int j=1; j<res[i].size(); ++j){
res[i][j] = min(res[i-1][j], res[i][j-1])+grid[i][j];
}
}
return res[grid.size()-1][grid[0].size()-1];
}
};
- LeetCode: Minimum Path Sum
- LeetCode Minimum Path Sum
- LeetCode : Minimum Path Sum
- [Leetcode] Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- [LeetCode] Minimum Path Sum
- [Leetcode] Minimum Path Sum
- Minimum Path Sum
- [LeetCode]Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- Minimum Path Sum
- [leetcode]Minimum Path Sum
- Minimum Path Sum
- LeetCode-Minimum Path Sum
- [leetcode] Minimum Path Sum
- JScrollPane 双滚动条
- 如何在linux shell中输入制表符tab
- Java高级(快速实现分布式锁)
- 学习笔记---------面向对象的内存分析
- 4、Configuration构建之properties节点
- Minimum Path Sum
- 编码问题
- 并发插入引发的死锁问题排查
- poj 3728 Catch That Cow bfs搜索 坑点在开两倍数组
- 5、Configuration构建之setting节点介绍
- C++_011_数据结构_循环双链表_混合链表
- 项目中遇到的水平越权漏洞及修复方法
- SQLite数据库的使用
- Java常用设计模式