LeetCode 64. 最小路徑和
阿新 • • 發佈:2021-06-11
64. 最小路徑和
Difficulty: 中等
給定一個包含非負整數的 _m_x_n_
網格grid
,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例 1:
輸入:grid = [[1,3,1],[1,5,1],[4,2,1]]
輸出:7
解釋:因為路徑 1→3→1→1→1 的總和最小。
示例 2:
輸入:grid = [[1,2,3],[4,5,6]]
輸出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
Solution
這個算是比較簡單型別的動態規劃題目了,題目要求從網格中找到一條從左上角到右下角的路徑,並且每次只能向右或者向下移動,所以到達網格中grid[i][j]
只會以下幾種情況:
- 當i=0或j=0時,此時在網格的邊緣處,此時只能向右或者只能向下移動
- 當i>0且j>0時,此時不在網格的邊緣處,那麼到達
grid[i][j]
可以是從它的上方或者左方方向,此時我們只需要取路徑和較小的方向即可
時間複雜度O(mn),沒有使用額外的空間。
class Solution: def minPathSum(self, grid: List[List[int]]) -> int: # m 矩陣行數 n 矩陣列數 m, n = len(grid), len(grid[0]) if m == 0 or n == 0: return 0 for i in range(m): for j in range(n): if i == 0 and j == 0: continue elif i > 0 and j == 0: grid[i][j] += grid[i-1][j] elif i == 0 and j > 0: grid[i][j] += grid[i][j-1] else: grid[i][j] += min(grid[i-1][j],grid[i][j-1]) return grid[m-1][n-1]
相似題目: