题号: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;
}
}