Leetcode.70.Climbing Stairs

2019-08-13  本文已影响0人  Jimmy木

题目

爬楼梯, 一共有n个阶梯, 每次可以爬1层或2层, 一共有多少种爬法.

Input: 2
Output: 2
Input: 3
Output: 3

思路1

递归, 将f(n)分为f(n+1)+f(n+2), 不采用缓存的情况下时间复杂度为2的n次方. 采用缓存情况下时间复杂度为O(n).

思路2

斐波那契函数, f(n) = f(n-1) + f(n-2).

int climbStairs(int n) {
    if (n == 1) {
        return 1;
    }
  int first = 1;
  int second = 2;
  for (int i = 3; i <= n; i++) {
      int third = first + second;
      first = second;
      second = third;
  }
  return second;
}

总结

了解斐波那契数列, 在使用递归时优先使用缓存.

上一篇下一篇

猜你喜欢

热点阅读