mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
"""
|
|
64. Minimum Path Sum
|
|
Difficulty: Medium
|
|
https://leetcode.com/problems/minimum-path-sum/
|
|
|
|
──────────────────────────────────────────────────
|
|
|
|
Given a m x n grid filled with non-negative numbers, find a path from
|
|
top left to bottom right, which minimizes the sum of all numbers along
|
|
its path.
|
|
|
|
Note: You can only move either down or right at any point in time.
|
|
|
|
|
|
|
|
Example 1:
|
|
|
|
Input: grid = [[1,3,1],[1,5,1],[4,2,1]]
|
|
Output: 7
|
|
Explanation: Because the path 1 → 3 → 1 → 1 → 1
|
|
minimizes the sum.
|
|
|
|
Example 2:
|
|
|
|
Input: grid = [[1,2,3],[4,5,6]]
|
|
Output: 12
|
|
|
|
|
|
|
|
Constraints:
|
|
|
|
• m == grid.length
|
|
|
|
• n == grid[i].length
|
|
|
|
• 1 <= m, n <= 200
|
|
|
|
• 0 <= grid[i][j] <= 200
|
|
"""
|
|
|
|
|
|
class Solution:
|
|
def minPathSum(self, grid: list[list[int]]) -> int:
|
|
if not grid or not grid[0]:
|
|
return 0
|
|
|
|
m = len(grid)
|
|
n = len(grid[0])
|
|
dp = [[0 for _ in range(n)] for _ in range(m)]
|
|
|
|
for c in range(n):
|
|
dp[0][c] = dp[0][c - 1] + grid[0][c] if c else grid[0][c]
|
|
|
|
for r in range(m):
|
|
dp[r][0] = dp[r - 1][0] + grid[r][0] if r else grid[r][0]
|
|
|
|
for r in range(1, m):
|
|
for c in range(1, n):
|
|
dp[r][c] = min(dp[r - 1][c], dp[r][c - 1]) + grid[r][c]
|
|
|
|
return dp[-1][-1]
|