1. Recursive Branching
Intuition
Recursively try taking 1 step or 2 steps from step 0 and step 1, calculating total cost.
Algorithm
- Define
solve(i): min cost to reach top from step i. - If
i >= n, return 0. - Return
cost[i] + min(solve(i + 1), solve(i + 2)). - Overall answer is
min(solve(0), solve(1)).
#include <iostream>#include <vector>#include <algorithm> using namespace std; class Solution { int solve(int i, const vector<int>& cost) { if (i >= cost.size()) return 0; return cost[i] + min(solve(i + 1, cost), solve(i + 2, cost)); }public: int minCostClimbingStairs(vector<int>& cost) { return min(solve(0, cost), solve(1, cost)); }}; int main() { Solution sol; vector<int> cost = {10, 15, 20}; cout << "Min Cost: " << sol.minCostClimbingStairs(cost) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(2^n) - Space complexity:
O(n) call stack