[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 };