leetcode 64.最小路径和 python 解法

题目描述

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步
leetcode 64.最小路径和 python 解法_第1张图片
leetcode 64.最小路径和 python 解法_第2张图片

python解法

总代码

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        #如果网格为空或者列数为0
        if not grid or not grid[0]:
            return 0
        rows,columns = len(grid),len(grid[0])#得到行数和列数
        dp = [[0] * columns for _ in range(rows)]#得到一个大小和网格一样,但赋值为0的新网格
        dp[0][0] = grid[0][0]#将左上角第一个值赋给新网格
        for i in range(1,rows):
            dp[i][0] = dp[i - 1][0] + grid[i][0] #将第一列的值进行累加
        for j in range(1,columns):
            dp[0][j] = dp[0][j - 1] + grid[0][j] #将第一行的值进行累加
        for i in range(1,rows):
            for j in range(1,columns):
                dp[i][j] = min(dp[i - 1][j],dp[i][j - 1]) + grid[i][j]  #在两个值中选择最小的一个,再与右下角的值相加
        
        return dp[rows - 1][columns - 1]

Step1.分别将第一列和第一列的值进行累加

leetcode 64.最小路径和 python 解法_第3张图片

Step2.在两个值中选择最小的一个,再与右下角的值相加,再将和保存在 d p [ i ] [ j ] dp[i][j] dp[i][j]

leetcode 64.最小路径和 python 解法_第4张图片

总结

本算法也是利用了动态规划的思想,基本和62,63差不多,首先是得到行列数,新建网格,然后对第一行和第一列的进行处理,再进行动态规划的思想处理,整体来说不难。

你可能感兴趣的:(LeetCode题目分析,python,leetcode,动态规划)