Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?


class Solution {
public:
    int climbStairs(int n) {
        if (n==0||n==1)
        return 1;
        int pre=cur=1;
        for(int i=2;i<=n;i++)
        {
            int temp=cur+pre;
            pre=cur;
            cur=temp;
        }
        return cur;
    }
};



别人的:

思路:首先很容易就想到了递归的解法。但是超时了。

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

 所以采用非递归的方式,其实此题类似于求斐波那契数列的和,但是递归不仅慢还可能溢出。下面采用非递归的方法,其中pre代表前n-1台阶的方法数,current代表第n台阶的方法数。

public int climbStairs(int n) {
    if (n == 0 || n == 1)
      return 1;
    int pre = 1;
    int current = 1;
    for (int i = 2; i <= n; i++) {
      int temp = current + pre;
      pre = current;
      current = temp;
    }
    return current;
  }

你可能感兴趣的:(Climbing Stairs)