64最小路徑和

2021-10-03 10:10:01 字數 1669 閱讀 8665

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

說明:每次只能向下或者向右移動一步。

示例:

輸入:

[[1,3,1],

[1,5,1],

[4,2,1]

]輸出: 7

解釋: 因為路徑 1→3→1→1→1 的總和最小。

主體思路都是,下乙個位置值=當前位置值+math.min(往下,往右),在最下行只能往右,在最右列只能往下。

/**

* 暴力遞迴,時間超時

** @param grid

* @return

*/public

intminpathsum

(int

grid)

int row = grid.length;

int col = grid[0]

.length;

return

process

(grid, row,

0, col,0)

;}public

intprocess

(int

grid,

int row,

int currow,

int col,

int curcol)

if(currow == row)

if(curcol == col)

return grid[currow]

[curcol]

+ math.

min(

process

(grid, row, currow +

1, col, curcol)

,process

(grid, row, currow, col, curcol +1)

);}/**

* 簡單動規,建立乙個備忘錄

** @param grid

* @return

*/public

intminpathsum1

(int

grid)

int row = grid.length -1;

int col = grid[0]

.length -1;

int[

] dp =

newint

[row +1]

[col +1]

;for

(int i = row; i >=

0; i--

)else

if(i != row && j == col)

else

if(i != row && j != col)

else}}

return dp[0]

[0];

}/**

* 用原本的陣列作為備忘錄

* @param grid

* @return

*/public

intminpathsum2

(int

grid)

for(

int i = grid.length -

1; i >=

0; i--)}

return grid[0]

[0];

}

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 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。知識點 動態規劃 多階段決策最優解模型,每階段都對應一組狀態 狀態轉移方程構造方式 遞迴 備忘錄 反向遞迴 迭代遞推 正向迭代 思路和 狀態轉移方式 ...