DP问题—Leetcode 64. Minimum Path Sum
来源:互联网 发布:华族经典 知乎 编辑:程序博客网 时间:2024/06/08 12:39
题目:
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.
分析:
这是Leetcode上一道medium难度的题,其实代码并不难,关键是要把握好问题的关键。我原本想到的是点到点的最短路径,那自然是用Dijkstra算法解决,可是这样写起来非常麻烦。后来发现,其实除了第一行和第一列的点以外,其他的点node[i][j] = min(node[i-1][j],node[i][j-1])+grid[i][j]来得到,这就成了典型的动态规划问题。只要先生成首行首列,再从左往右,自上而下地来循环生成每一格的值,最后就会得到右下角的值。
具体实现:
- step1:从左到右累加,生成首行每一格的路径值。
- step2:接下来的每一列,从上往下累加,先得到第一格的值。
- step3:之后的每一格,用动态规划,根据min_sum[i][j] = min(min_sum[i-1][j],min_sum[i][j-1])+grid[i][j],得到相应的最小路径值。
- step4:遍历完每一格后,返回最后右下角min_sum[row - 1][col - 1]的值。
代码:
class Solution {public: int minPathSum(vector<vector<int>>& grid) { /*得到行数和列数*/ int row = grid.size(); int col = grid[0].size(); vector<vector<int>> min_sum; //存储每一格的路径最小值 vector<int> first_line; /*将第一行的值生成 */ first_line.push_back(grid[0][0]); for (int i = 1; i < col; i++){ int temp = first_line[i - 1] + grid[0][i]; first_line.push_back(temp); } min_sum.push_back(first_line); for (int i = 1; i < row; i++){ vector<int> new_line(1, min_sum[i - 1][0] + grid[i][0]); //新一行的第一格的值 for (int j = 1; j < col; j++){ /*动态规划:根据上方和左方取最小,得到其他格的值*/ int temp = min(new_line[j - 1], min_sum[i - 1][j]) + grid[i][j]; new_line.push_back(temp); } min_sum.push_back(new_line); } return min_sum[row - 1][col - 1]; //返回右下角那一格的值 }};
阅读全文
0 0
- DP问题—Leetcode 64. Minimum Path Sum
- LeetCode OJ-64.Minimum Path Sum(DP)
- 【Leetcode】Minimum Path Sum (DP)
- [leetcode][DP] Minimum Path Sum
- leetcode---minimum-path-sum---dp
- Leetcode-Minimum Path Sum(dp)
- 64. Minimum Path Sum DP经典问题
- Leetcode - Dynamic Progr - 64. Minimum Path Sum(BFS+DP)
- leetcode 64. Minimum Path Sum DP动态规划
- leetcode -- Minimum Path Sum -- 简单DP
- LeetCode-64-Minimum Path Sum DP水题
- [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
- [bzoj1009][HNOI2008]GT考试(dp+矩阵加速+KMP)
- 朴素贝叶斯模型
- Andrew-Coursera-DL课程-笔记part2-1(Practical aspects of Deep Learning)
- 二维数组中的查找
- 在部署django时踩的坑 uwsgi + nginx 部署django应用
- DP问题—Leetcode 64. Minimum Path Sum
- analytical model、numerical model 和 empirical model 三者的区别
- 图的基础
- 在centos6.5上安装Django1.7.11笔记
- poj3684:Physics Experiment
- 数据结构:定长顺序表
- 学习JavaScript数据结构与算法(二)——栈
- Vistual Studio 快捷键
- C/C++经典程序训练3---模拟计算器