• leetcode-Minimum Path Sum


    Minimum Path Sum

    题意:

      给定一个方格,每个格子中有一个数字,现在我们要找一条从方格左上角出发直到方格右下角的路,条件是这条路经过的数字之和为最小。

     

    解题思路:

      此题仍然是动态规划类型的问题,关键是我们如何将这个问题划分为多个类似阶段。

      目前的想法是可不可以先找到小方格内的最小路径,然后在去利用当前的结果去找比他大的方格的最小路径。如果是这样的话,大方格的最小路径一定会路过小方格最小路径吗?(一定会到达小方格的左上角吗?)这一点还不能确定。

      从刚才的想法我衍生出来另一种方法,首先我们观察我们每一步影响到的方块数,我们会发现随着路径长度的增加,我们是以阶梯形状向上推进的(假设我们从右下方往左上方找)。像这样:

    OOO   OOO   OOX   OXX   XXX

    OOO > OOX > OXX > XXX > XXX

    OOX   OXX   XXX   XXX   XXX

      依照动态规划的思想,在每个阶段,我们可以将打叉的区域的方格数字标记为从右下角出发到达当前方格的最短路径长度。层层递增,那么有当前 

    matrix[i][j] = min(matrix[i-1][j], matrix[i][j-1])

      假设我们有一个矩阵如下:

    S50

    160

    43E

      那么首先我们先更新矩阵右下角两条边的最短路径,然后在依次往上更新矩阵:

    S5   S5   S50   (S+5)50

    16 > 190 > 890 >   8  90

    73   73E   73E     7  3E

      于是程序我们就可写成:

    class Solution:
        # @param {integer[][]} grid
        # @return {integer}
        def minPathSum(self, grid):
            m = len(grid)
            n = len(grid[0])
            for i in range(1,m):
                grid[i][0] += grid[i-1][0]
            for j in range(1,n):
                grid[0][j] += grid[0][j-1]
            for i in range(1,m):
                for j in range(1,n):
                    grid[i][j] += min(grid[i-1][j], grid[i][j-1])
            return grid[-1][-1]
    
  • 相关阅读:
    十六、异步编程——messagedialog
    关于委托的一个摘录
    com interop 简述
    [STAThread]的使用
    Python初识和基础语法
    Python基础数据类型以及格式化输出
    JS读取PHP中设置的中文cookie时出现乱码的解决方法
    解决跨域读写Cookies的问题,(ASP、PHP、ASP.NET、JSP)解决方案
    多字段distinct查询
    Dedecms当前位置{dede:field name='position'/}修改,去掉>方法
  • 原文地址:https://www.cnblogs.com/Blaxon/p/4701550.html
Copyright © 2020-2023  润新知