746. Min Cost Climbing Stairs
Problem Statement
You are given an integer array cost
where cost[i]
is the cost of ith
step on a staircase. Once you pay the cost, you can either climb one or two steps.
You can either start from the step with index 0
, or the step with index 1
.
Return the minimum cost to reach the top of the floor.
Example 1:
Input: cost = [10,15,20]
Output: 15
Explanation: You will start at index 1.
- Pay 15 and climb two steps to reach the top.
The total cost is 15.
Example 2:
Input: cost = [1,100,1,1,1,100,1,1,100,1]
Output: 6
Explanation: You will start at index 0.
- Pay 1 and climb two steps to reach index 2.
- Pay 1 and climb two steps to reach index 4.
- Pay 1 and climb two steps to reach index 6.
- Pay 1 and climb one step to reach index 7.
- Pay 1 and climb two steps to reach index 9.
- Pay 1 and climb one step to reach the top.
The total cost is 6.
Constraints:
2 <= cost.length <= 1000
0 <= cost[i] <= 999
Intuition
Approach:
Recursively travel and find out the answer
Links
Video Links
Approach 1:
class Solution {
public:
vector<int> dp;
int find_ans(vector<int> &cost, int index){
if(index <= 1)
return 0;
if(dp[index] != -1)
return dp[index];
int one_step = cost[index-1] + find_ans(cost, index-1);
int two_step = cost[index-2] + find_ans(cost, index-2);
return dp[index] = min(one_step, two_step);
}
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
dp = vector<int> (n+1,-1);
return find_ans(cost, n);
}
};
Approach 2:
class Solution {
public:
vector<int> dp;
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
dp = vector<int> (n+1,0);
for(int i=2; i<=n; i++){
int one_step = cost[i-1] + dp[i-1];
int two_step = cost[i-2] + dp[i-2];
dp[i] = min(one_step, two_step);
}
return dp[n];
}
};
Approach 3:
Approach 4:
Similar Problems
Last updated