动态规划算法
解题思路
首先感谢csdn上这位大佬的教学思路
首先获取矩阵的长和宽,然后创建一个二维数组dp,用于存放移动到grid[i][j]时的最短路径和,而dp[i][j]其实也就是dp[i-1][j]与dp[i][j-1]中最小的那个(即上一个与左一个)与grid[i][j]的和。将dp[0][j]与dp[i][0]完成初始化(循环从1开始,从0开始的话i-1与j-1会到-1),循环填入dp,最后输出dp[m-1][n-1]即可
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
//矩阵长、宽
int m=grid.size();
int n=grid[0].size();
//二维数组dp,存放最短路径和
vector<vector<int>> dp(m,vector<int>(n));
//初始化
dp[0][0]=grid[0][0];
for(int i=1;i<m;i++)
dp[i][0]=dp[i-1][0]+grid[i][0];
for(int j=1;j<n;j++)
dp[0][j]=dp[0][j-1]+grid[0][j];
//循环填满dp
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
dp[i][j]=min(dp[i][j-1],dp[i-1][j])+grid[i][j];
}
//返回答案
return dp[m-1][n-1];
}
};
作者:kutu1bw-i
链接:https://leetcode.cn/problems/minimum-path-sum/solution/dong-tai-gui-hua-suan-fa-by-kutu1bw-i-1w5s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。