您的位置:首页 > 编程语言 > Python开发

LeetCode 64 Minimum Path Sum(Python详解及代码实现)

2017-08-02 16:34 1016 查看
【题目】

Given a m x n grid filled with non-negativenumbers, find a path from top left to bottom right which minimizes the sum ofall numbers along its path.

 

Note: You can only move either down orright at any point in time.

给定一个m×n的非负矩阵,每个位置(i,j)只能向下和向右),然后找到一条路使得从(0,0)到(m - 1,n - 1)经过的所有数字的和最小。

 

【思路】

该题与62 UniquePath很相似,均利用了(动态规划DP)思想。

在第零行,从[0][0]至该行尾,只有一条路径,所以该行元素每个位置每个位置最小和均是左边数字与其本身之和;

在第零列,从[0][0]至该列尾,只有一条路径,所以该列元素每个位置每个位置最小和均是上边数字与其本身之和;

对于非零行,非零列,[i][i]元素的最小值是左侧和上方二者中的最小值与其本身之和,这样一直迭代下去,最终右下角的数字即为所求

【Python实现】

class Solution(object):

   def minPathSum(self, grid):

       """

       :type grid: List[List[int]]

       :rtype: int

       """

       m = len(grid)

       n = len(grid[0])

       for i in range(m):

           for j in range(n):              

                if i == 0 and j != 0:#在第0行

                    grid[i][j] = grid[i][j-1] +grid[i][j]

                elif i != 0 and j == 0:#在第0列

                     grid[i][j] = grid[i-1][j]+ grid[i][j]

                elif i != 0 and j != 0:#0行0列除外,寻找左侧和上方最小值

                    grid[i][j] =min(grid[i][j-1],grid[i-1][j]) + grid[i][j]

       print(grid[m-1][n-1])       

       return grid[m-1][n-1]

               

if __name__ == '__main__':

    S= Solution()

   grid = [[3,1,2],[3,4,1],[1,6,2],[7,6,5]]

   S.minPathSum(grid)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息