1137. 第 N 个泰波那契数

泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

  输入:n = 4
  输出:4
  解释:
  T_3 = 0 + 1 + 1 = 2
  T_4 = 1 + 1 + 2 = 4
示例 2:

  输入:n = 25
  输出:1389537

方法一:空间优化:动态计算

  • 如果 n < 3,答案可直接得出。

  • 否则,初始化前 3 个斐波那契数字 x = 0, y = z = 1,并执行 n - 2 步循环。循环的每一步:

    • 令 x = y

    • 令 y = z

    • 令 z = x + y + z

    • 返回z。
class Solution {
public int tribonacci(int n) {
if (n < 3) return n == 0 ? 0 : 1; int tmp, x = 0, y = 1, z = 1;
for (int i = 3; i <= n; ++i) {
tmp = x + y + z;
x = y;
y = z;
z = tmp;
}
return z;
}
}

复杂度分析

  • 时间复杂度:O(N)。

  • 空间复杂度:O(1),保存最后 3 个斐波那契数。

方法二:性能优化:带记忆的递归

预计算 38 个斐波那契数:

  • 初始化一个数组 nums 用于保存斐波那契数,并记录前 3 个斐波那契数。

  • 返回 helper(n - 1)

递归方法 helper(k)

  • 如果 k == 0,返回 0。
  • 如果 nums[k] != 0,返回 nums[k]。
  • 否则 nums[k] = helper(k - 1) + helper(k - 2) + helper(k - 3),返回 nums[k]。

从预计算的数组中检索所需的斐波那契数。

class Tri {
private int n = 38;
public int[] nums = new int[n]; int helper(int k) {
if (k == 0) return 0;
if (nums[k] != 0) return nums[k]; nums[k] = helper(k - 1) + helper(k - 2) + helper(k - 3);
return nums[k];
} Tri() {
nums[1] = 1;
nums[2] = 1;
helper(n - 1);
}
} class Solution {
public static Tri t = new Tri();
public int tribonacci(int n) {
return t.nums[n];
}
}

复杂度分析

时间复杂度:O(1),预计算 38 个斐波那契数,并在数组中检索。

空间复杂度:O(1),存储 38 个斐波那契数的数组。

方法三:性能优化:动态计算
  预计算 38 个斐波那契数:

  初始化一个数组用于保存斐波那契数,并初始化前 3 个斐波那契数字。

  i 从 3 循环到 38,每一步计算出一个新的斐波那契数:nums[i] = helper(i - 1) + helper(i - 2) + helper(i - 3)。

  从数组中检索所需的斐波那契数。

class Tri {
private int n = 38;
public int[] nums = new int[n];
Tri() {
nums[1] = 1;
nums[2] = 1;
for (int i = 3; i < n; ++i)
nums[i] = nums[i - 1] + nums[i - 2] + nums[i - 3];
}
} class Solution {
public static Tri t = new Tri();
public int tribonacci(int n) {
return t.nums[n];
}
}

1137. 第 N 个泰波那契数的更多相关文章

  1. 刷题-力扣-1137. 第 N 个泰波那契数

    1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...

  2. LeetCode.1137-第N个泰波那契数(N-th Tribonacci Number)

    这是小川的第409次更新,第441篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第260题(顺位题号是1137).Tribonacci(泰波那契)序列Tn定义如下: 对于n&g ...

  3. UVA 11582 Colossal Fibonacci Numbers! 大斐波那契数

    大致题意:输入两个非负整数a,b和正整数n.计算f(a^b)%n.其中f[0]=f[1]=1, f[i+2]=f[i+1]+f[i]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...

  4. 斐波那契数[XDU1049]

    Problem 1049 - 斐波那契数 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 1673  Ac ...

  5. C++求斐波那契数

    题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...

  6. Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数

    Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...

  7. DP:斐波纳契数

    题目:输出第 n 个斐波纳契数(Fibonacci) 方法一.简单递归 这个就不说了,小n怡情,大n伤身啊……当n=40的时候,就明显感觉到卡了,不是一般的慢. //输出第n个 Fibonacci 数 ...

  8. HDU4549 M斐波那契数

    M斐波那契数列 题目分析: M斐波那契数列F[n]是一种整数数列,它的定义例如以下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 如今给 ...

  9. HDU 5914 Triangle(打表——斐波那契数的应用)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...

随机推荐

  1. 遗传算法 TSP(Python代码)

    该代码是本人根据B站up主侯昶曦的代码所修改的. 原代码github地址:https://github.com/Houchangxi/heuristic-algorithm/blob/master/T ...

  2. Python - typing 模块 —— Any Type

    前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...

  3. Windows注册表内容详解(转载)

    (关于windows注册表的整理,来源网络) 前提 一.什么是注册表 ​ 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...

  4. 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下

    背景及常见术语 背景 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库- ...

  5. luoguP1528&2329 栅栏&切蛋糕

    前言 蒟弱本来是在亿万年前做二分答案专题栅栏的,由于数据水所以过掉了,后来发现有一个数据加强版,也就是本题,于是爆T了...过了有个五六个月回来填坑了...现在开O2是在最优解第一个(自豪ing 题目 ...

  6. @Profile-根据不同环境注入bean

    介绍 @Profile元注解是在不同的生产环境中,@Bean创建的SpringBean根据spring.profiles.active指定的环境不同创建不同环境的bean对象 一.@Profile元注 ...

  7. 小程序iphone蒙层滚动穿透

    如图,这个弹出层在滚动列表的时候,在iPhone上是会穿透导致页面也跟着滚动,所以这时不能用普通的view标签加scroll属性实现,看了下文档发现有专门的scroll-view组件,用该组件替换就可 ...

  8. Vue 插槽 slot的简单实用

  9. (二)MQTT客户端模拟连接阿里云并上传数据

    本文主要讲述使用MQTT.fx接入物联网平台 一.下载MQTT.fx客户端 官网链接 二.设置相关参数 打开MQTT单片机编程工具,将三元组复制进去,生成所需要的信息 单片机工具下载地址 三元组还记得 ...

  10. 虚拟机--第二章java内存区域与内存溢出异常--(抄书)

    这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第二章java内存区域与内存溢出 ...