LeetCode题解(python)
64. 最小路径和
题目描述
解题心得
典型的动态规划问题——最小路径和
最佳子结构设计,参考前几天写的从左上角到右小角有多少种可能的路径。
这里实际就是每个格子都有自己的价值(value),在走的过程中,要选择一个方向使得总路径和最小,即:从起点到当前位置之前的最小总路径价值+当前位置的价值。
需要注意的是要单独考虑第一行和第一列,因为当i=0的时候,
[i-1]
为小于0,在python中此时得到的位置的价值为0,实际上是不存在这个位置的。时间复杂度: O ( m × n ) O(m \times n) O(m×n),m为行数,n为列数
执行用时 : 76 ms, 在Minimum Path Sum的Python3提交中击败了64.94% 的用户
内存消耗 : 14.7 MB, 在Minimum Path Sum的Python3提交中击败了28.02% 的用户
解题代码
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
row = len(grid)
col = len(grid[0])
road = [[0 for _ in range(col)] for _ in range(row)]
for i in range(row):
for j in range(col):
if i == 0 and j == 0:
road[i][j] = grid[i][j]
elif i == 0:
road[i][j] = road[i][j-1]+grid[i][j]
elif j == 0:
road[i][j] = road[i-1][j] + grid[i][j]
else:
if road[i-1][j]>road[i][j-1]:
road[i][j] = road[i][j-1]+grid[i][j]
else:
road[i][j] = road[i-1][j]+grid[i][j]
return road[row-1][col-1]