[Leetcode][EasyOnes][Climbing Stairs]

某位女同学面试的时候遇到了,由于没有写出来O(1)空间复杂度的,被拒了。。我压力山大。。。。

直接递归会超时,O(n)记录问题的解也不太科学,但也写了一遍练练手。

 1 class Solution {
 2 public:
 3     int climbStairs(int n) {
 4         if (n <= 2) {
 5             return n;
 6         } else {
 7             vector<int> f(n + 1, 0);
 8             f[1] = 1;
 9             f[2] = 2;
10             for (int i = 3; i <= n; i++) {
11                 f[i] = f[i - 1] + f[i - 2];
12             }
13             return f[n];
14         }
15         
16     }
17 };

迭代的版本,其实很简单。

 1 class Solution {
 2 public:
 3     int climbStairs(int n) {
 4         if (n <= 2) {
 5             return n;
 6         } else {
 7             int step1 = 1;
 8             int step2 = 2;
 9             for (int i = 3; i <= n; i++) {
10                 int step3 = step1 + step2;
11                 step1 = step2;
12                 step2 = step3;
13             }
14             return step2;
15         }
16         
17     }
18 };

 

posted @ 2014-07-06 18:12  poemqiong  阅读(149)  评论(0编辑  收藏  举报