python-leetcode-第 N 个泰波那契数

1137. 第 N 个泰波那契数 - 力扣(LeetCode)

解法 1:递归(O(3^n),不推荐)

递归直接按照数学定义实现,但时间复杂度高,不适合大 n。

python 复制代码
class Solution:
    def tribonacci(self, n: int) -> int:
        if n == 0:
            return 0
        elif n == 1 or n == 2:
            return 1
        return self.tribonacci(n - 1) + self.tribonacci(n - 2) + self.tribonacci(n - 3)

缺点 :大量重复计算,时间复杂度 O(3^n),n 较大时会超时。

解法 2:动态规划(O(n),空间 O(n))

使用数组存储计算结果,按顺序计算。

python 复制代码
class Solution:
    def tribonacci(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1 or n == 2:
            return 1
        dp = [0] * (n + 1)
        dp[1] = dp[2] = 1
        for i in range(3, n + 1):
            dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
        return dp[n]

优点 :时间复杂度 O(n) ,比递归更快。

⚠️ 缺点 :空间复杂度 O(n)

解法 3:迭代(O(n),空间 O(1))

只存储 前三个变量,减少空间占用。

python 复制代码
class Solution:
    def tribonacci(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1 or n == 2:
            return 1
        a, b, c = 0, 1, 1
        for _ in range(n - 2):
            a, b, c = b, c, a + b + c
        return c

优点 :时间复杂度 O(n) ,空间复杂度 O(1),适合大 n。

相关推荐
HXhlx9 分钟前
CART决策树基本原理
算法·机器学习
Wect38 分钟前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway8 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风8 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect8 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea1 天前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法