今天继续刷leetcode,第64题,求最短路径和。
分析:
动态规划,先求出第一行和第一列的数值,然后求剩下的时候,加上左边和上面的最小值,直到右下角。
问题:
1、动态规划求解过程,递归求解子问题,并保存历史纪录;
附上c++代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int rows=grid.size();
int cols=grid[0].size();
for(int i=1;i<rows;i++)
grid[i][0]+=grid[i-1][0];
for(int j=1;j<cols;j++)
grid[0][j]+=grid[0][j-1];
for(int i=1;i<rows;i++)
{
for(int j=1;j<cols;j++)
{
int temp=grid[i-1][j]>grid[i][j-1]?grid[i][j-1]:grid[i-1][j];
grid[i][j]+=temp;
}
}
return grid[rows-1][cols-1];
}
};
附上python代码:
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
rows=len(grid)
cols=len(grid[0])
for i in range(rows):
for j in range(cols):
if i==0 and j==0:
continue
elif i==0:
grid[i][j]+=grid[i][j-1]
elif j==0:
grid[i][j]+=grid[i-1][j]
else:
grid[i][j]+=min(grid[i-1][j],grid[i][j-1])
return grid[rows-1][cols-1]