获得徽章 0
- 70. 爬楼梯
难度:简单
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
例1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
例2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
思路:
最初:最开始想到的这是一个排列组合题,即k个2和m个1之间一共有多少种排列方式,因此想要用组合的公式来求解,但是公式比较复杂,因此涉及到的阶乘运算也会比较大,故舍弃;
然后:考虑了用递归的方式来求解,因此写了注释的那段代码。当n较小的时候没有问题,当n较大的时候就容易栈溢出,故舍弃;
最后:因为上面的思考,了解到这本质上是一个斐波那契数列,斐波那契数列是有通项公式的,但是公式里涉及到了无理数,因此不方便直接用公式来求解。所以想的是把递归的方式改为了遍历循环的方式,故有了下图的代码。展开评论1