第十二次作业

leetcode上关于Array的题目:


解题思路:

动态规划问题,令result[i][j]为从起点到达(i,j)的最短距离,当然result[0][0]=grid[0][0]

对于一个m*n的矩阵上任意位置(i,j)(0≦i≦m-1,0≦j≦n-1)

1. 若是i==0,即第一行,对于任意j>0,(即不包括(0,0))有result[i][j]=grid[i][j-1]+grid[i][j]

2. 若是j==0,即第一列,对于任意i>0,(即不包括(0,0))有result[i][j]=grid[i-1][j]+grid[i][j]

3. 剩下的情况,有result[i][j]=min(grid[i-1][j],grid[i][j-1])+grid[i][j]

实际操作上,result可以就是grid,再进行上述操作即可。

代码:

class Solution:
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        m=len(grid)       #行数
        n=len(grid[0])    #列数
        for i in range(0,m):  #遍历
            for j in range(0,n):
                if i==0 and j==0: #(0,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[m-1][n-1]   #返回最终结果

结果:



猜你喜欢

转载自blog.csdn.net/weixin_39367127/article/details/80053870