在 C++ 中的最小路徑和
假設我們有一個 m x n 矩陣,其中填充了非負整數,請找到一條從左上角到右下角的路徑,使路徑上所有數字之和最小。任何時候只能向下或向右移動。例如,如果矩陣如下所示
1 | 3 | 1 |
1 | 5 | 1 |
4 | 2 | 1 |
輸出將是 7,路徑將是 1,3,1,1,1,這將使總和最小化
我們來看看步驟 -
a := 行數,b := 列數
i := a – 1,j := b - 1
while j >= 0
matrix[a, j] := matrix[a, j] + matrix[a, j + 1]
j 減 1
while i >= 0
matrix[i, b] := matrix[i, b] + matrix[i + 1, b]
i 減 1
j := b - 1 和 i := 行 - 1
while i >= 0
while j >= 0
matrix[i, j] := matrix[i, j] + matrix[i, j + 1] 和 matrix[i + 1, j] 的最小值
j 減 1
j := b - 1
i := i - 1
返回 matrix[0, 0]
示例
我們來看看以下實現,以便更好地理解 -
class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ row = len(grid)-1 column = len(grid[0])-1 i=row-1 j=column-1 while j>=0: grid[row][j]+=grid[row][j+1] j-=1 while i>=0: grid[i][column]+=grid[i+1][column] i-=1 j=column-1 i = row-1 while i>=0: while j>=0: grid[i][j] += min(grid[i][j+1],grid[i+1][j]) j-=1 j=column-1 i-=1 return(grid[0][0])
輸入
[[1,3,1],[1,5,1],[4,2,1]]
輸出
7
廣告