1. Recursive Exploration
Intuition
Recursively branch into moving down and right until reaching (m - 1, n - 1).
Algorithm
- Define
solve(r, c). - If
r == m - 1 && c == n - 1, return 1. - If
r >= m || c >= n, return 0. - Return
solve(r + 1, c) + solve(r, c + 1).
#include <iostream> using namespace std; class Solution { int solve(int r, int c, int m, int n) { if (r == m - 1 && c == n - 1) return 1; if (r >= m || c >= n) return 0; return solve(r + 1, c, m, n) + solve(r, c + 1, m, n); }public: int uniquePaths(int m, int n) { return solve(0, 0, m, n); }}; int main() { Solution sol; cout << "Unique Paths: " << sol.uniquePaths(3, 7) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(2^(m + n)) - Space complexity:
O(m + n) call stack