""" 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]