1. Recursive Exploration
Intuition
Recursively branch into moving down and right from (0, 0) to (m - 1, n - 1).
Algorithm
- Define
solve(r, c). - If
r >= m || c >= n, return \infty. - If
r == m - 1 && c == n - 1, returngrid[r][c]. - Return
grid[r][c] + min(solve(r + 1, c), solve(r, c + 1)).
#include <iostream>#include <vector>#include <algorithm> using namespace std; class Solution { int solve(int r, int c, const vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); if (r == m - 1 && c == n - 1) return grid[r][c]; if (r >= m || c >= n) return 1e9; return grid[r][c] + min(solve(r + 1, c, grid), solve(r, c + 1, grid)); }public: int minPathSum(vector<vector<int>>& grid) { return solve(0, 0, grid); }}; int main() { Solution sol; vector<vector<int>> grid = {{1, 3, 1}, {1, 5, 1}, {4, 2, 1}}; cout << "Min Path Sum: " << sol.minPathSum(grid) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(2^(m + n)) - Space complexity:
O(m + n) call stack