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 }