LeetCode 70.爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

题目链接

示例

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

题目分析

这个问题是动态规划的基础问题。根据台阶数量,可以得到如下的递推过程:

  • n = 1时,结果为1;
  • n = 2时,结果为2;
  • n = k时,结果为f(n-1) + f(n-2);

从上面的递推过程,我们可以轻易地写出递归算法:

int climbStairs(int n){
    if (n == 1) return 1;
    if (n == 2) return 2;
    return climbStairs(n-1) + climbStairs(n-2);
}

但是递归算法的时间复杂度太高,所以我们将其改为迭代算法,见下文。


题目解答

int climbStairs(int n){
    if (n == 1) return 1;
    if (n == 2) return 2;

    int a = 1, b = 2;
    int res;
    for (int i = 3; i <= n; i++){
        res = a + b;
        a = b;
        b =res;
    }

    return res;
}

你可能感兴趣的:(LeetCode 70.爬楼梯)