1. 思路
动态规划。上到 n 阶楼梯 可以由 n-1 或 n-2阶到达。
此题思路与 509:斐波那契数 思路一样,可以参考:
https://blog.csdn.net/weixin_44857576/article/details/127626712
解决此问题可以利用
- 数组存储中间结果,此时 时间复杂度和空间复杂度都是O(n) .---- > CODE_1
- 由于到达第 n 阶 梯只和前面 n-1以及 n-2阶楼梯有关,所以只需要存储到到达前面两阶楼梯的方案数即可,此时空间复杂度降低到 O(n),时间复杂度保持不变。---- > CODE_2
2.CODE
2.1 CODE_1
vector<int> dy(45);
dy[0]=1;
dy[1]=2;
for(int i=2;i<n;i++){
dy[i]=dy[i-1]+dy[i-2];
}
return dy[n-1];
2.2 CODE_2
if(n<=2) return n;
int p1=2,p2=1,fn=0;//p1 位到达 第 n-1 阶梯的方案数,p2 为到达第 n-2 阶梯的方案数
for(int i=3;i<=n;i++)
{
fn=p1+p2;
p2=p1;
p1=fn;
}
return fn;