假设一个楼梯有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 步递归:f(n) = f(n - 1) + f(n - 2)。但太慢,因为会重复计算很多次f(k)(k <= n)。
1、考虑preNumDistinctWays记录前一梯的方法数;
2、令当前方法数distinctWays,加上前一梯preNumDistinctWays方法数,就是下一梯求的方法数;distinctWays+= preNumDistinctWays。
另外,菲波拉契数列也有通项公式: