【题目】
Given amxngrid filled with non-negative numbers, find a path from top left to bottom right whichminimizesthe sum of all numbers along its path.
Note:You can only move either down or right at any point in time.
【思路】
设sum[i][j] 到位置(i,j)时路径最小和
状态转移方程:
sum[i][j] = min(sum[i][j-1] ,sum[i-1][j]) + grid[i][j]
优化(空间轮转):
sum[j] = min(sum[j],sum[j-1]) + grid[i][j]
【代码】
/*------------------------------------
* 日期:2015-02-04
* 作者:SJF0115
* 题目: 64.Minimum Path Sum
* 网址:https://oj.leetcode.com/problems/minimum-path-sum/
* 结果:AC
* 来源:LeetCode
* 博客:
---------------------------------------*/
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
if(grid.empty()){
return 0;
}//if
int row = grid.size();
int col = grid[0].size();
vector<int> sum(grid[0]);
// 第一行 只能从左边过来
for(int i = 1;i < col;++i){
sum[i] += sum[i-1];
}//for
// 动态规划
// sum[j] = min(sum[j],sum[j-1]) + grid[i][j]
for(int i = 1;i < row;++i){
sum[0] += grid[i][0];
for(int j = 1;j < col;++j){
sum[j] = min(sum[j],sum[j-1]) + grid[i][j];
}//for
}//for
return sum[col-1];
}
};
int main(){
Solution s;
vector<vector<int> > grid = {{1,5,3,7},{2,6,4,1},{5,4,6,5}};
int result = s.minPathSum(grid);
// 输出
cout<<result<<endl;
return 0;
}
分享到:
相关推荐
用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现Leetcode题目.zip用C语言实现...
JVM 基础 JAVA 并发 JVM 性能调优 LeetCode 算法 .......
My Solutions to Leetcode Database problems. 我的 Leetcode 数据.zip
Leetcode 题解.pdf
LeetCode 后端.zip
LeetCode 101_C++_算法_leetcode_leetcode101_leetcode101.zip
Leetcode101.zip
Recording personal Java, Python, JavaScript solutions for Leetcode problems. 记录个人 Java, Python, JavaScript 的Leetcode题解.zip
刷leetcode总结.md
原创:leetcode 111. 二叉树的最小深度记住:最小深度和最大深度方法不同。* Definition for a binary tree node.in
原创:leetcode 107. 二叉树的层次遍历 II【队列】* Definition for a binary tree node.
原创:leetcode 5. 最长回文子串//寻找以i-1,i为中点偶数长度的回文//寻找以i为中心的奇数长度的回文。
原创:leetcode 22.括号生成【回溯】对待这种问题,千万别暴力搜索,那样太笨了。但是这个方法是最容易理解的//回溯法 (后面的括号) 不可以大于 (前面
My Solutions to Leetcode problems. All solutions support C
LeetCode674. 最长连续递增序列674. 最长连续递增序列解题思路:记录每次递增序列的长度,max存储最大长度// 递增序列更新最大长度} else
LeetCode746.使用最小花费爬楼梯746. 使用最小花费爬楼梯解题思路:动态规划当前楼梯最小值=Math.min(前一步最小值,前两步最小值)简化 mi
leetcode-editor,在ide中做leetcode练习,支持leetcode.com和leetcode-cn.com,以满足练习的基本需求。理论上支持:intellij idea phpstorm webstorm pycharm rubymine appcode clion goland datagrip rider mps ...
LeetCode888. 公平的糖果棒交换888. 公平的糖果棒交换解题思路:哈希表法第一次遍历 A\B 计算二者的糖果差值 diff,同时以 B糖果值建立哈希