110 最小路径和
Posted 唐的糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了110 最小路径和相关的知识,希望对你有一定的参考价值。
原题网址:https://www.lintcode.com/problem/minimum-path-sum/description
描述
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
你在同一时间只能向下或者向右移动一步
标签
动态规划(DP)
思路:同数字三角形,创建动态规划数组dp【m】【n】,dp【i】【j】表示从左上角出发到达终点grid【i】【j】的最小路径和。
状态转移方程:dp【i】【j】= min(dp【i-1】【j】,dp【i】【j-1】)+ grid【i】【j】;
为计算方便,第一行和第一列可以单独初始化。
最后 return dp【m-1】【n-1】。
AC代码:
class Solution { public: /** * @param grid: a list of lists of integers * @return: An integer, minimizes the sum of all numbers along its path */ int minPathSum(vector<vector<int>> &grid) { // write your code here int row=grid.size(); if (row==0) { return 0; } int col=grid[0].size(); vector<vector<int>> dp(row,vector<int>(col,0)); dp[0][0]=grid[0][0]; for (int i=1;i<row;i++)//第一列; { dp[i][0]=dp[i-1][0]+grid[i][0]; } for (int j=1;j<col;j++)//第一行; { dp[0][j]=dp[0][j-1]+grid[0][j]; } for (int i=1;i<row;i++) { for (int j=1;j<col;j++) { dp[i][j]=min(dp[i][j-1],dp[i-1][j])+grid[i][j]; } } return dp[row-1][col-1]; } };
以上是关于110 最小路径和的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
数学建模MATLAB应用实战系列(110)-机器人路径规划——快速扩展随机树(Rapidly-exploring Random Trees)(附Python代码)