🎉 One-stop destination for all your technical interview Preparation 🎉
int f(vector<vector<int>>& grid, int r, int c)
{
if (r < 0 || c < 0) return 1e9;
if (r == 0 && c == 0) return grid[r][c];
int up = f(grid, r - 1, c);
int left = f(grid, r, c - 1);
return grid[r][c] + min(up, left);
}
int minSumPath(vector<vector<int>>& grid)
{
int n = grid.size();
int m = grid[0].size();
return f(grid, n - 1, m - 1);
}
int f(vector<vector<int>>& grid, int r, int c, vector<vector<int>>& dp)
{
if (r < 0 || c < 0) return 1e9;
if (r == 0 && c == 0) return grid[r][c];
if (dp[r][c] != -1) return dp[r][c];
int up = f(grid, r - 1, c, dp);
int left = f(grid, r, c - 1, dp);
return dp[r][c] = grid[r][c] + min(up, left);
}
int minSumPath(vector<vector<int>>& grid)
{
int n = grid.size();
int m = grid[0].size();
vector<vector<int>> dp(n, vector<int>(m, -1));
return f(grid, n - 1, m - 1, dp);
}
int minSumPath(vector<vector<int>>& grid)
{
int n = grid.size();
int m = grid[0].size();
vector<vector<int>> dp(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i == 0 && j == 0)
dp[i][j] = grid[i][j];
else {
int up = i > 0 ? dp[i - 1][j] : INT_MAX;
int left = j > 0 ? dp[i][j - 1] : INT_MAX;
dp[i][j] = grid[i][j] + min(up, left);
}
}
}
return dp[n - 1][m - 1];
}
int minSumPath(vector<vector<int>>& grid)
{
int n = grid.size();
int m = grid[0].size();
vector<int> prev(m, 0);
for (int i = 0; i < n; i++) {
vector<int> curr(m, 0);
for (int j = 0; j < m; j++) {
if (i == 0 && j == 0)
curr[j] = grid[i][j];
else {
int up = i > 0 ? prev[j] : INT_MAX;
int left = j > 0 ? curr[j - 1] : INT_MAX;
curr[j] = grid[i][j] + min(up, left);
}
}
prev = curr;
}
return prev[m - 1];
}