假设你正在爬楼梯,楼梯到顶部一共有 n 级。

每次你可以选择爬 1 级或 2 级,你一共有多少种不同的的方式爬到顶部。

注意:给定的 n 是正整数。

Example 1:

Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

Example 2:

Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

####解法1:

根据题目意思,每次可以选择爬 1 级或爬 2 级,所以 n 级的楼梯的最后一次爬之前所处的位置只会是第 n-1 级别或第 n-2 级,继续往前推可以发现解为:

解的表达式

其实就是斐波那契数列的变形,可以看作斐波那契数列去掉第一项所得的新数列。

代码实现:

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    let prev = 0;
    let curr = 1;
    for (let i = 0; i < n; i ++) {
        let tmp = curr;
        curr = prev + curr;
        prev = tmp;
    }
    return curr;
};