Lintcode演算法練習 110 最小路徑和

2021-10-05 01:51:50 字數 1802 閱讀 7669

描述給定乙個只含非負整數的m*n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。

樣例

example 1:

input: [[1,3,1],[1,5,1],[4,2,1]]

output: 7

example 2:

input: [[1,3,2]]

output: 6

思路利用動態規劃思想解決問題,動態規劃的思想是將乙個問題分為若干子問題,通過解決所有子問題來解決整個問題。並且為了節約執行時間,需將每個子問題的結果進行儲存,以防重複計算帶來的時長浪費。

根據題意,從矩陣(二維陣列)左上角僅通過向右或下運動到達右下角,這即為總問題。那麼矩陣中的元素大致可分為三類,這是需要處理的三類子問題:

所以只要分別解決到達以上三類所有位置的最小路徑,並將每乙個元素所需的最短到達路徑計入另乙個矩陣,那麼即可得到所有元素的最短路徑,也就得到了結果。那麼計算三類的最短路徑,分別具有如下的遞推公式:

# 矩陣第一行的元素

minpathmatrix[i]

[j]+= minpathmatrix[i]

[j-1

]# 矩陣第一列的元素

minpathmatrix[i]

[j]+= minpathmatrix[i-1]

[j]# 矩陣其他位置元素

minpathmatrix[i]

[j]+=

min(minpathmatrix[i]

[j-1

],minpathmatrix[i-1]

[j])

利用以上的遞推公式結合下圖的通俗解釋,即可編寫相應程式:

步驟

返回最短路徑矩陣的右下角元素

def

minpathsum

(grid)

: len_row =

len(grid)

len_column =

len(grid[0]

) minpathmatrix = grid

for i in

range

(len_row)

:for j in

range

(len_column)

:if i ==

0and j ==0:

continue

elif i ==

0and j !=0:

minpathmatrix[i]

[j]+= minpathmatrix[i]

[j-1

]elif i !=

0and j ==0:

minpathmatrix[i]

[j]+= minpathmatrix[i-1]

[j]else

: minpathmatrix[i]

[j]+=

min(minpathmatrix[i]

[j-1

],minpathmatrix[i-1]

[j])

return minpathmatrix[len_row-1]

[len_column-

1]

lintcode練習 110 最小路徑和

給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。你在同一時間只能向下或者向右移動一步 解題思路 1,3,5,7,9 5,2,8,5,1 4,4,7,2,3 3,6,6,1,1 2,8,5,0,4 1 假設上面為m n的網格,因為只能向下或者向右,所以第一行和第一列...

LintCode 110 最小路徑和

給定乙個只含非負整數的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你在同一時間只能向下或者向右移動一步 public c...

lintcode 110最小路徑和

最小路徑和 給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。注意事項 你在同一時間只能向下或者向右移動一步 您在真實的面試中是否遇到過這個題?yes樣例 標籤 動態規劃 相關題目 1 dynamic programming 容易 數字三角形 26 2 dynami...