给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
1 2 3 4 5 6 7 8
| 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ if not grid or not grid[0]: return False m, n = len(grid), len(grid[0]) dp = [[0 for i in range(n)] for j in range(m)] for i in range(m): for j in range(n): if i==0 and j==0: dp[i][j] = grid[i][j] elif i==0: dp[i][j] = dp[i][j-1] + grid[i][j] elif j==0: dp[i][j] = dp[i-1][j] + grid[i][j] else: dp[i][j] = min(dp[i][j-1], dp[i-1][j]) + grid[i][j] return dp[-1][-1]
|