leetcode-70爬楼梯

349 阅读1分钟

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

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

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

示例 1:

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

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶
  • 思路1 这是一道典型的递归求解问题,第n阶只能有n-1阶跨1阶或者n-2阶跨2阶达到,因此f(n)=f(n-1)+f(n-2)
int climbStairs(int n){
    if(n<=2) return n;
    return climbStairs(n-1)+climbStairs(n-2);
}

但是它在n=45的时候竟然超时了,改成思路2的循环实现

  • 思路2

标识符i1i2代表i-1i-2的值,求出i的值之后,更新i1i2的值。

int climbStairs(int n){
    if(n<=2) return n;
    int i1 = 1;
    int i2 = 2;
    int res;
    for(int i = 3; i <= n; i++) {
        res = i1+i2;
        i1 = i2;
        i2 = res;
    }
    return res;
}

时间复杂度:o(n) 空间复杂度:o(1)