Cover image for Classic Interview 150 Questions P64 Minimum Path Sum

Classic Interview 150 Questions P64 Minimum Path Sum


Timeline

Timeline

2025-12-13

init

Dynamic Programming

Problem:

Since you can only move right or down, the previous step to a point can only be from the left or above. Let dp[i][j] represent the minimum path sum to reach grid[i][j].
We have:

dp[i][j]=min(dp[i1][j],dp[i][j1])+grid[i][j];dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];

1234567891011121314151617181920212223242526272829
#include <vector>using std::vector;class Solution {    public:        int minPathSum(vector<vector<int> > &grid)        {                // dp[i][j] represents the minimum path sum to reach grid[i][j].                int i, j, m = grid.size(), n = grid[0].size();                vector<vector<int> > dp(m, vector<int>(n, 0));                dp[0][0] = grid[0][0];                for (j = 1; j < n; j++) {                        dp[0][j] = dp[0][j - 1] + grid[0][j];                }                for (i = 1; i < m; i++) {                        dp[i][0] = dp[i - 1][0] + grid[i][0];                }                for (i = 1; i < m; i++) {                        for (j = 1; j < n; j++) {                                dp[i][j] = std::min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];                        }                }                return dp[m - 1][n - 1];        }};

leetcode hot 100 rewrite

12345678910111213141516171819202122232425262728293031
#include <vector>using std::vector;class Solution {    public:        int minPathSum(vector<vector<int> > &grid)        {                int i, j, m = grid.size(), n = grid[0].size();                // m == grid.length                // n == grid[i].length                // 1 <= m, n <= 200                // 0 <= grid[i][j] <= 200                // Each step you can only move down or right by one.                vector<vector<int> > dp(m, vector<int>(n, 0));                dp[0][0] = grid[0][0];                for (i = 1; i < m; i++)                        dp[i][0] = dp[i - 1][0] + grid[i][0];                for (j = 1; j < n; j++)                        dp[0][j] = dp[0][j - 1] + grid[0][j];                for (i = 1; i < m; i++) {                        for (j = 1; j < n; j++)                                dp[i][j] = std::min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];                }                return dp[m - 1][n - 1];        }};
Loading comments…