//////Top-Down approach / recursion-memoization////
class Solution {
public:
int solve(vector<int>& cost, int n, vector<int> &dp)
{
if(n==0) return cost[0];
if(n==1) return cost[1];
if(dp[n]!=-1) return dp[n];
dp[n]=min(solve(cost, n-1,dp),solve(cost, n-2, dp))+cost[n];
return dp[n];
}
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
vector<int> dp(n+1, -1);
int ans=min(solve(cost, n-1, dp),solve(cost, n-2, dp));
return ans;
}
};
/////Tabulation / bottom-up approach/////
class Solution {
public:
int solve(vector<int>& cost, int n)
{
vector<int> dp(n+1, -1);
dp[0]=cost[0];
dp[1]=cost[1];
for(int i=2;i<n;i++)
{
dp[i]=min(dp[i-1],dp[i-2])+cost[i];
}
return min(dp[n-1], dp[n-2]);
}
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
return solve(cost, n);
}
};
////////space optimization///////
class Solution {
public:
int solve(vector<int>& cost, int n)
{
int pr1=cost[0], pr2=cost[1], curr;
for(int i=2;i<n;i++)
{
curr=min(pr1,pr2)+cost[i];
pr1=pr2;
pr2=curr;
}
return min(pr1, pr2);
}
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
return solve(cost, n);
}
};
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter