64 最小路徑和

2021-09-25 03:48:57 字數 1169 閱讀 9551

方法一:動態規劃法(二維)

該問題可以通過動態規劃的方法進行求解,動態規劃最主要的是將其動態轉移方程寫出來。

由於該每次只能向下和向右移動,故可以知道,對於位置m,n處,到達該點只能通過位置m,n-1處以及位置m-1,n處,故最小的路徑應為二者較小值加當前位置的值,定義dp[i][j]為位置i,j處的最小路徑和,則有dp[i][j] = grid[i-1][j-1] + min(dp[i-1][j],dp[i][j-1]).

初始條件:dp[1][j] = grid[0][j-1] +dp[1][j-1] dp[i][1] = grid[i-1][0] +dp[i-1][1]

int minpathsum

(vector>

& grid)

}return dp[m]

[n];

}

複雜度:

時間複雜度: o(mn) 。

空間複雜度: o(mn) 。

方法二:動態規劃法(一維)

對於動態規劃問題一般二維的動態轉移矩陣可以設法考慮是否可以轉換為一維陣列。

上述方法一中動態轉移方程為dp[i][j] = grid[i-1][j-1] + min(dp[i-1][j],dp[i][j-1]),每一次迴圈中,i僅與i-1有關,故可以寫成dp[j] = grid[i-1][j-1] + min(dp[j],dp[j-1])。

int minpathsum

(vector>

& grid)

}return dp[n]

;}

複雜度:

時間複雜度: o(mn) ;

空間複雜度: o(n) 。

方法三:動態規劃法(空間複雜度為o(1))

為了節省空間,我們還可以直接在grid矩陣上進行狀態轉移。

int minpathsum

(vector>

& grid)

}return grid[m-1]

[n-1];

}

複雜度:

時間複雜度: o(mn) ;

空間複雜度: o(1) 。

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

64 最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7解釋 因為路徑 1 3 1 1 1 的總和最小。利用動態規劃,二維陣列中每個元素儲存的是走到當前節點的總...