力扣 64. 最小路径和
题目:
链接:https://leetcode.cn/problems/minimum-path-sum/
思路:
使用动态规划思想
根据题目可得只能走右和下,对应的就是只能从左和上到达终点路径上的数字总和的最小值
dp[i][j]定义为 从起点dp[0][0]到dp[i][j]的路径集合
dp状态为min
dp[i][j]状态转移为: dp[i][j] = min(dp[i-1][j],dp[i][j-1] )+nums[i][j]
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
for(int i =0;i<grid.size();i++){
for(int j = 0;j<grid[0].size();j++){ //可以在原数组上操作,因为只用在dp[i][j]更新的时候
if(i==0&&j==0)continue; //起始点
else if(j==0) //没有dp[i][j-1]的情况
grid[i][j]+=grid[i-1][j];
else if(i==0)//没有dp[i-1][j]的情况
grid[i][j]+=grid[i][j-1];
else grid[i][j]+=min(grid[i-1][j],grid[i][j-1]); //状态转移
}
}
return grid[grid.size()-1][ grid[0].size()-1];
}
};