最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
row = len(grid)
column = len(grid[0])
# 将第一列全部加上上面的步数
for i in range(1,row):
grid[i][0] += grid[i-1][0]
# 将第一行全部加上左面的步数
for j in range(1,column):
grid[0][j] += grid[0][j-1]
# 任意一个元素,到其最小路径为min(左元素,上元素)
for i in range(1,row):
for j in range(1,column):
grid[i][j] += min(grid[i-1][j], grid[i][j-1])
return(grid[row-1][column-1])
题解:
这是一道动态规划的题目,本来想用递归做,从尾到头,但是在递归的时候,无法对列进行切片,没有办法减少列表的规模,告败
改用从头到尾的方法,首先第一行的只能由其左面的元素过来,到其最小路径为从左往右;第一列的只能由其上面的元素过来,到其最小路径为从上到下。之后的元素由min(左元素,上元素)决定。