国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

leetcode-MinimumPathSum

2019-11-14 17:05:42
字體:
來源:轉載
供稿:網友

Minimum Path Sum

題意:

  給定一個方格,每個格子中有一個數字,現在我們要找一條從方格左上角出發直到方格右下角的路,條件是這條路經過的數字之和為最小。

 

解題思路:

  此題仍然是動態規劃類型的問題,關鍵是我們如何將這個問題劃分為多個類似階段。

  目前的想法是可不可以先找到小方格內的最小路徑,然后在去利用當前的結果去找比他大的方格的最小路徑。如果是這樣的話,大方格的最小路徑一定會路過小方格最小路徑嗎?(一定會到達小方格的左上角嗎?)這一點還不能確定。

  從剛才的想法我衍生出來另一種方法,首先我們觀察我們每一步影響到的方塊數,我們會發現隨著路徑長度的增加,我們是以階梯形狀向上推進的(假設我們從右下方往左上方找)。像這樣:

OOO  ?。希希稀  。希希亍  。希兀亍  。兀兀?/span>

OOO >?。希希亍。尽。希兀亍。尽。兀兀亍。尽。兀兀?/span>

OOX   OXX  ?。兀兀亍  。兀兀亍  。兀兀?/span>

  依照動態規劃的思想,在每個階段,我們可以將打叉的區域的方格數字標記為從右下角出發到達當前方格的最短路徑長度。層層遞增,那么有當前 

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

  假設我們有一個矩陣如下:

S50

160

43E

  那么首先我們先更新矩陣右下角兩條邊的最短路徑,然后在依次往上更新矩陣:

S5   S5  ?。?span style="color: #ff0000;">50   (S+5)50

16?。尽。?span style="color: #ff0000;">90?。尽?span style="color: #ff0000;">890 >   8 ?。梗?/span>

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]

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿瓦提县| 新河县| 铁力市| 尚志市| 织金县| 江口县| 仪征市| 稷山县| 遂宁市| 平和县| 合阳县| 金门县| 哈尔滨市| 双桥区| 那坡县| 铜川市| 景宁| 剑河县| 章丘市| 沈阳市| 新龙县| 简阳市| 怀来县| 韩城市| 张家川| 蒙山县| 天峨县| 宜宾县| 乐至县| 钦州市| 霞浦县| 淮阳县| 镶黄旗| 绥化市| 抚远县| 赣榆县| 永泰县| 西丰县| 梅河口市| 邯郸县| 丰县|