Skip to content

509. Fibonacci Number

题目

The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,

F(0) = 0, F(1) = 1
F(n) = F(n - 1) + F(n - 2), for n > 1.

Given n, calculate F(n).

 

Example 1:

Input: n = 2
Output: 1
Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.

Example 2:

Input: n = 3
Output: 2
Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.

Example 3:

Input: n = 4
Output: 3
Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3.

 

Constraints:

  • 0 <= n <= 30
Related Topics
  • 递归
  • 记忆化搜索
  • 数学
  • 动态规划

  • 👍 847
  • 👎 0
  • 思路一

    递归法解决问题,使用 python 时,可以使用 function.tools 中的 cache 缓存计算结果,时间复杂度由原来的 O(2n) 降低到 O(N)

    解法

    python
    from functools import cache
    
    
    class Solution:
        def fib(self, n: int) -> int:
            @cache
            def fib(self, n: int) -> int:
                if n == 0:
                    return 0
                elif n == 1:
                    return 1
                else:
                    return self.fib(n - 1) + self.fib(n - 2)

    复杂度分析

    • 时间复杂度 O(N)
    • 空间复杂度 O(N)

    解法二

    py
    # leetcode submit region begin(Prohibit modification and deletion)
    
    
    class Solution:
        def fib(self, n: int) -> int:
            if n < 2:
                return n
    
            p, q, r = 0, 0, 1
            for i in range(2, n + 1):
                p, q = q, r
                r = p + q
    
            return r
            
    # leetcode submit region end(Prohibit modification and deletion)

    复杂度分析

    • 时间复杂度 O(N)
    • 空间复杂度 O(1)