64. 最小路径和 Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
  • 二、代码
  • 三、解题思路


一、题目描述

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

说明:每次只能向下或者向右移动一步。

示例 1

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

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

示例 2

输入:grid = [[1,2,3],[4,5,6]]
输出:12

提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100

二、代码

代码如下:

import numpy as np
class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        print(np.array(grid))
        matrix = grid.copy()
        #初始化矩阵的第一行&第一列
        for i in range(n-1):
            matrix[0][i+1] = matrix[0][i] + grid[0][i+1]
        for i in range(m-1):
            matrix[i+1][0] = matrix[i][0] + grid[i+1][0]
        print(np.array(matrix))
        #为剩下的行&列赋值
        for i in range(m-1):
            for j in range(n-1):
                matrix[i+1][j+1] = min(matrix[i][j+1],matrix[i+1][j]) + grid[i+1][j+1]
        print(np.array(matrix))
        
        return matrix[m-1][n-1]

三、解题思路

本题解题思路和63. 不同路径 II Python的思路类似,都是通过构造一个路径矩阵matrix进行求解,只不过本题的矩阵中不再是0或者1的问题,而是添加了路径距离的因素。
本题的路径矩阵matrix中每一个元素的含义为:**从左上角[0,0]位置到达[i,j]位置处最短的路径长度。**而求法也类似,
当前位置[i,j]的值 = 当前位置对应的长度grid[i][j] + 左边元素和上面元素中最小的元素min(matrix[i][j+1],matrix[i+1][j])
最后输出matrix矩阵中的右下角元素值,即为最短路径。

你可能感兴趣的:(LeetCode中等难度题集,python,算法,开发语言)