原题
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
My Answer
思路分析
典型的回溯法应用:
与LeetCode 63题思路相同,无非是result矩阵的边界换成了行列累加和;具体思路可参考LeetCode 64. Minimum Path Sum解题思路。
class Solution:
def minPathSum(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
len_row, len_col = len(grid), len(grid[0])
res = [[0 for _ in range(len_col)] for _ in range(len_row)]
res[0][0] = grid[0][0]
for i in range(1, len_row):
res[i][0] = res[i-1][0] + grid[i][0]
for i in range(1, len_col):
res[0][i] = res[0][i-1] + grid[0][i]
for i in range(1, len_row):
for j in range(1, len_col):
res[i][j] = min(res[i-1][j]+grid[i][j], res[i][j-1]+grid[i][j])
return res[len_row-1][len_col-1]