演算法程式設計10 最小路徑和(64)

2021-09-27 04:40:48 字數 944 閱讀 5171

題目描述:給定乙個包含非負整數的 m x n 矩陣,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

要求:從左上角第乙個數字開始,只能向下或向右。

題目分析:題目要求找打最小路徑和,需要解決n個小問題,然後這n個小問題的答案就是這個問題的答案。本問題屬於動態規劃。

python**如下:

class solution:

def minpathsum(self, grid: list[list[int]]) -> int:

for i in range(len(grid)):

for j in range(len(grid[0])):

if i==0 and j==0:

continue

elif i==0:

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

elif j==0:

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

else:

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

return grid[-1][-1]

**分析:由於只能向下或向右,所以要考慮邊界情況:

我們從第一行開始逐行計算。第乙個數字保持不變,第二個數字是行邊界,只能與前乙個數字相加,為了減少空間消耗,我們在grid原矩陣進行修改:grid[0][1]=grid[0][1]+grid[0][0]。第一行的數字按照此規律以此進行。第二行數字第乙個為左邊界,只能與上面數字進行加,grid[1][0]=gride[1][0]+gride[0][0],第二個數字與上和左最小數字進行加。按照這三種情況進行迴圈迭代。矩陣最後乙個數字就是最小路徑和。

leetcod執**況:

64 最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。用動態規劃可直接解決,dp i j 代表著從 0 0 ...

64 最小路徑和

方法一 動態規劃法 二維 該問題可以通過動態規劃的方法進行求解,動態規劃最主要的是將其動態轉移方程寫出來。由於該每次只能向下和向右移動,故可以知道,對於位置m,n處,到達該點只能通過位置m,n 1處以及位置m 1,n處,故最小的路徑應為二者較小值加當前位置的值,定義dp i j 為位置i,j處的最小...

64 最小路徑和

題目描述 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。知識點 動態規劃 多階段決策最優解模型,每階段都對應一組狀態 狀態轉移方程構造方式 遞迴 備忘錄 反向遞迴 迭代遞推 正向迭代 思路和 狀態轉移方式 ...