刷leetcode:Climbing Stairs

题号:70 题目

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?

Hide Tags  
Dynamic Programming


分析:

这是很经典的面试题,题目比较简单,对于台阶个数的不同,我们进行一下分析:

n=0,  0

n=1,只有一种,输出1

n=2,有两种走法 (1+1)、2 输出2

n=3,有(1+1+1) 、(2+1)、(1+2)三种走法 输出3

n=4,有5种走法

………

由此我们发现当前的走法是前两步的走法之和。即f(n)=f(n-1)+f(n-2).

这是典型的斐波那契数列问题。

代码实现上有递归和给递归两种方式,这里采用的非递归,如下:

/**
 * @Date:2015-3-12
 * @author:renxiao
 * 斐波那契数列,非递归形式
 * *
public class Solution {
    public int climbStairs(int n) {
        if(n==0||n==1||n==2) return n;
        int first=1;
        int second=2;
        int third=0;
        int i=3;
        while(i<=n){
            third=first+second;
            first=second;
            second=third;
            i++;
        }
        return third;
    }
}

点赞