leetcode 64 最小路径和

动态规划的想法,dp数组中存储的位置代表每一条路径到达当前位置的最小路径和,每一个状态进行转移的时候只和左面和上面的位置有关。

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        dp=[[0 for _ in range(len(grid[0]))]for _ in range(3)]
        dp[0][0]=grid[0][0]
        for i in range(1,3):
            dp[i][0]=dp[i-1][0]+grid[i][0]
        for j in range(1,len(grid[0])):

            dp[0][j]=dp[0][j-1]+grid[0][j]



        for i in range(1,len(grid)):
            for j in range(1,len(grid[0])):
                dp[i][j]=min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j])


        return dp[len(grid)-1][len(grid[0])-1]

空间优化,因为只用到前两行的内容,所以可以进行空间优化,再仔细思考,其实只用到一行,因为左上角的元素已经用不到,可以存储左面的元素。

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        dp=[float('inf') for _ in range(len(grid[0]))]

        #dp[0]=grid[0][0]
        dp[0]=0
        for i in range(len(grid)):
            dp[0]=dp[0]+grid[i][0]
            for j in range(1,len(grid[0])):
                dp[j]=min(dp[j-1]+grid[i][j],dp[j]+grid[i][j])


        return dp[len(grid[0])-1]
全部评论

相关推荐

sagima:然后这个帖子又登上了
点赞 评论 收藏
分享
程序员卤馆:加v细说
点赞 评论 收藏
分享
lingo12:1.最好加个业务项目,大部分面试官工作以后会更偏重业务 2.实习部分描述一般般,可能hr看到会觉得你产出不够不给你过简历 3.蓝桥杯这些大部分人都有的,不如不写,反而减分项。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务