赞
踩
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
你在同一时间只能向下或者向右移动一步
样例
样例 1:
输入: [[1,3,1],[1,5,1],[4,2,1]]
输出: 7
样例解释:
路线为: 1 -> 3 -> 1 -> 1 -> 1。
样例 2:
输入: [[1,3,2]]
输出: 6
解释:
路线是: 1 -> 3 -> 2
题目要求只能往下或者向右走。
则单元格dp(i,j)题解应该是单元格dp(i-1,j)单元格dp(i,j-1)的较小值+单元格(i,j)的值。
考虑特殊情况边界问题:
(1)左边为边界,即i=0情况下,单元格dp(i,j)题解只能从上面来
解为单元格dp(i,j-1)+单元格(i,j)的值。
(2)上边为边界,即j=0情况下。解只能从左边来。解为单元格dp(i-1,j)+单元格(i,j)的值。
(3)上下都是边界,即处于起点位置,直接返回坐标(i,j)。
class Solution: """ @param grid: a list of lists of integers @return: An integer, minimizes the sum of all numbers along its path """ def minPathSum(self, grid): # write your code here if (not grid): return 0 m = len(grid)#行数 n = len(grid[0])#列数 for i in range(1, n):#左边为边界时,解只能从上班来 grid[0][i] += grid[0][i - 1] for j in range(1, m):#上边为边界时,解只能从左边来 grid[j][0] += grid[j - 1][0] for x in range(1, m):#无边界时 for y in range(1, n): grid[x][y] += min(grid[x - 1][y], grid[x][y - 1]) return grid[-1][-1] #包含了左边和上都是边界的情况 c=Solution() grid=[[1,3,1],[1,5,1],[4,2,1]] d=c.minPathSum(grid) print(d)
答案:
半路出家的小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。