Climbing Stairs

 1 int climbStairs(int n)
 2 {
 3     if(n<=0)
 4         return 0;
 5     if(n==1)
 6         return 1;
 7     if(n==2)
 8         return 2;
 9     return climbStairs(n-1)+climbStairs(n-2);
10 }

青蛙跳台阶问题,第一反应就是上面的代码了,结果是 超时

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

AC,可是这个空间复杂度是O(n),可以优化的,没有必要保存数组,只需要3个变量就可以了

 1     int climbStairs(int n) {
 2         if(n<=0)
 3             return 0;
 4         int i,first,second,result;
 5         if(n==1)
 6             return 1;
 7         if(n==2)
 8             return 2;
 9         first=1;
10         second=2;
11         for(i=3;i<=n;++i){
12             result=first+second;
13             first=second;
14             second=result;
15         }
16         return result;
17     }

 

 

posted on 2014-03-25 11:06  crane_practice  阅读(117)  评论(0编辑  收藏  举报

导航