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?

代码如下(方法一:超时):

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

 方法二:AC

 1 public class Solution {
 2     public int climbStairs(int n) {
 3         if(n==1||n==2)
 4         return n;
 5         
 6         int num1=1,num2=2,sum=0;
 7         for(int i=3;i<=n;i++)
 8         { sum=num1+num2;
 9             num1=num2;
10             num2=sum;
11         }
12         return sum;
13     }
14 }