class Solution {
public:
int fib(int n) {
vector<int>fbnq={0,1};
if(n>1){
for(int i=1;i<n;i++){
fbnq.push_back(fbnq[i]+fbnq[i-1]);
}
}
return fbnq[n];
}
};
没什么好说的,很简单。
class Solution {
public:
int climbStairs(int n) {
vector<int>fbnq={1,1};
if(n>1){
for(int i=1;i<n;i++){
fbnq.push_back(fbnq[i]+fbnq[i-1]);
}
}
return fbnq[n];
}
};
只要把斐波那契数列的第一个数改为1即可,因为走1或2都可以就代表当前楼梯的方法数就是前两格楼梯方法数之和。
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int>result(cost.size()+1,0);
for(int i=2;i<result.size();i++){
result[i]=min(result[i-1]+cost[i-1], result[i-2]+cost[i-2]);
}
return result[cost.size()];
}
};
每格的计算就是取前两格的最低开销与离开楼梯的开销和的最小值,从最低开始计算,就可得到到每一格楼梯的最小开销,最终得到走完楼梯的最小开销。