leetcode64.最小路径和 Python

题目:

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。

示例:

leetcode64.最小路径和 Python_第1张图片

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。

思路:

动态规划

可以直接在矩阵上修改,减小时间复杂度,把当前位置的数改为到当前位置的最小路径,起始位置不用变,直接跳过进行后面的运算,在行为0或者列为0的两个边界上,计算方法不同,行为0的时候计算最小路径和就是当前位置的数加上当前位置前一列的路径和,列为0的时候就是当前位置的数加上上一行的路径和,因为每次移动只能是向下或者向右移动一步,所以其他位置最小路径和计算就是在上一行和上一列的路径和里找一个小的,然后加上当前位置的数,得到当前位置的最小路径和,直到遍历到右下角,最后返回最小路径和。

class Solution(object):
    def minPathSum(self, grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if i == 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[-1][-1]

你可能感兴趣的:(leetcode,动态规划,路径最小化,矩阵,算法,Python)