1137. 第 N 个泰波那契数
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 个泰波那契数的更多相关文章
- 刷题-力扣-1137. 第 N 个泰波那契数
1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...
- LeetCode.1137-第N个泰波那契数(N-th Tribonacci Number)
这是小川的第409次更新,第441篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第260题(顺位题号是1137).Tribonacci(泰波那契)序列Tn定义如下: 对于n&g ...
- 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]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...
- 斐波那契数[XDU1049]
Problem 1049 - 斐波那契数 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 1673 Ac ...
- 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 …… ...
- Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数
Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...
- DP:斐波纳契数
题目:输出第 n 个斐波纳契数(Fibonacci) 方法一.简单递归 这个就不说了,小n怡情,大n伤身啊……当n=40的时候,就明显感觉到卡了,不是一般的慢. //输出第n个 Fibonacci 数 ...
- HDU4549 M斐波那契数
M斐波那契数列 题目分析: M斐波那契数列F[n]是一种整数数列,它的定义例如以下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 如今给 ...
- HDU 5914 Triangle(打表——斐波那契数的应用)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...
随机推荐
- Java8新特性(一)之Lambda表达式
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- RationalRose使用
UML 概述 什么是 UML? Unified Modeling Language (UML)又称统一建模语言或标准建 模语言,是始于 1997 年一个 OMG 标准,它是一个支持模型化 和软件系统开 ...
- MySQL-06-DQL语句
DQL sql文件下载链接: https://alnk-blog-pictures.oss-cn-shenzhen.aliyuncs.com/blog-pictures/world.sql selec ...
- Pikachu-暴力破解模块
一.概述 "暴力破解"是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取. 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果. 为 ...
- 003 TCP/IP协议详解(一)
TCP/IP TCP/IP 意味着 TCP 和 IP 在一起协同工作. TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信. IP 负责计算机之间的通信. TCP 负责将数据分割并装入 IP ...
- docker 安装部署 mysql(配置文件启动)
获取 mysql 镜像 docker pull mysql:5.6 docker images 创建容器 创建宿主机 redis 容器的数据和配置文件目录 # 创建宿主机 redis 容器的数据和配置 ...
- 如何在HTML中实现图片的滚动效果
<MARQUEE onmouseover=stop() onmouseout=start() scrollAmount=3 loop=infinite deplay="0"& ...
- HTML <form> 标签的 method 属性
定义和用法 method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面). 表单数据可以作为 URL 变量(method="get")或者 HTTP p ...
- ASP.NET Core:依赖注入
ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core应用程序可以利用内置的框架服务将它们注入到启动类的方法中,并且应用程序服务能够配置注入.由ASP.NET Core提供的默 ...
- 消除不受信任的HTML (来防止XSS攻击)
问题 在做网站的时候,经常会提供用户评论的功能.有些不怀好意的用户,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,此时需要清理该HTML,以避免跨站脚本cr ...