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?

算法

有n阶,第一次迈一阶,剩余的跟n-1的次数相同,或者第一次迈2阶,剩余的跟n-2的次数相同。斐波那契数列。

代码一:

 1 public int climbStairs(int n) {
 2         int[] a=new int[n+1];
 3         if(n<3)
 4             return n;
 5         else{
 6             a[1]=1;
 7             a[2]=2;
 8             for(int i=3;i<=n;i++){
 9                 a[i]=a[i-1]+a[i-2];
10             }
11             return a[n];
12         }  
13     }

代码二

 1 public int climbStairs(int n){
 2         if(n<3)
 3             return n;
 4         else{
 5             int beforeOne=2,beforeTwo=1,sum = 0;
 6             for(int i=3;i<=n;i++){
 7                 sum=beforeOne+beforeTwo;
 8                 beforeTwo=beforeOne;
 9                 beforeOne=sum;
10             }
11             return sum;
12         }
13     }

注意事项

下面的代码会超时

1 public class Solution {
2     public int climbStairs(int n) {
3         if(n==1||n==2)
4             return n;
5         else
6             return climbStairs(n-1)+climbStairs(n-2);
7     }
8 }

 

posted on 2015-11-26 15:48  qiaoshanzi  阅读(132)  评论(0编辑  收藏  举报

导航