这是小川的第409次更新,第441篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第260题(顺位题号是1137)。Tribonacci(泰波那契)序列Tn定义如下:

对于n> = 0,T0 = 0,T1 = 1,T2 = 1,并且T(n+3) = T(n) + T(n+1) + T(n+2)

给定n,返回Tn的值。

例如:

输入:n = 4

输出:4

说明:

T_3 = 0 + 1 + 1 = 2

T_4 = 1 + 1 + 2 = 4

输入:n = 25

输出:1389537

注意

  • 0 <= n <= 37

  • 答案保证小于32位整数,即 答案 <= 231 - 1。

第一种解法

泰波那契,和斐波那契数列相似,只是比斐波那契数列多了一项,后一项的值为前三项的值之和。

暴力解法,直接使用递归,会超时

public int tribonacci(int n) {
if (n <= 2) {
return n == 0 ? 0 : 1;
}
return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3);
}

第二种解法

在第一种解法中,使用了递归,虽然代码变简单了,但是多了许多重复计算,比如T(4) = T(3)+T(2)+T(1) = T(0)+T(1)+T(2)+T(2)+T(1),只是计算n为4时,就计算了两次n为0和n为1,当n更大时,重复的计算会严重影响代码计算速度。

我们可以使用数组,将每一步的计算结果都保存起来,当新的一项需要前面三项的计算结果时,可以直接从数组中取,减少不必要的重复计算。

此解法的时间复杂度是O(N),空间复杂度为O(N),使用了一个容量为n+1的数组。

public int tribonacci2(int n) {
if (n <= 2) {
return n == 0 ? 0 : 1;
}
int[] arr = new int[n+1];
arr[1] = arr[2] = 1;
for (int i=3, len=arr.length; i<len; i++) {
arr[i] = arr[i-1]+arr[i-2]+arr[i-3];
}
return arr[n];
}

第三种解法

在第二种解法的基础上,我们还可以继续优化。

泰波那契数列中,新的一项需要借助前三项的值得到,例如T(6) = T(5)+T(4)+T(3),在第二种解法中,我们却将T(0)T(1)T(2)的值都存起来了,但是计算T(6)又用不到T(0)T(1)T(2),浪费了存储空间。对此,我们可以使用局部变量替换数组,只保留前三项的值,每次计算完新的一项值后,更新一次前三项的值即可。

此解法的时间复杂度是O(N),空间复杂度为O(1),只使用了4个局部变量。

public int tribonacci3(int n) {
if (n <= 2) {
return n == 0 ? 0 : 1;
}
int T0 = 0, T1 = 1, T2 = 1;
int temp = 0;
for (int i=3; i<n+1; i++) {
temp = T0 + T1 + T2;
T0 = T1;
T1 = T2;
T2 = temp;
}
return temp;
}

小结

算法专题目前已更新LeetCode算法题文章266+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.1137-第N个泰波那契数(N-th Tribonacci Number)的更多相关文章

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

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

  2. 1137. 第 N 个泰波那契数

    1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给 ...

  3. LeetCode.509——斐波那契数

    问题描述: 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) ...

  4. 力扣(LeetCode) 509. 斐波那契数

    斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) = F(N ...

  5. 【LeetCode】509. 斐波那契数

    题目 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,   F(1) = 1 F(N) = ...

  6. Java实现 LeetCode 509 斐波那契数

    509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 ...

  7. leetcode 509. 斐波那契数

    问题描述 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,   F(1) = 1 F(N) ...

  8. [Swift]LeetCode509. 斐波那契数 | Fibonacci Number

    The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...

  9. 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]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...

随机推荐

  1. ThinkPHP胜出Laravel 近4倍,主流框架性能测试

    主流PHP框架性能非权威测试 作为一个PHP开发者,而且是初创企业团队的技术开发者,选择开发框架是个很艰难的事情. 用ThinkPHP的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期 ...

  2. swoole 定时器 swoole_time_tick 和 swoole_time_after

    <?php class myticker{ public $server = null; CONST host = '127.0.0.1'; CONST port = 9502; public ...

  3. 浅析BFC及其作用

    本文链接:https://blog.csdn.net/riddle1981/article/details/52126522

  4. jquery实现在光标位置(input、textarea)插入内容的方法

    通过扫码枪扫码.按钮点击事件在光标处插入文本,这是前台js常用的功能.但是在input输入框和textarea文本框定位光标,插入数据是有点不同的 首先最简单的,适用于input输入框的方法 HTML ...

  5. 关于redis的主从、哨兵、集群(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/c295477887/article/de ...

  6. Python之threading模块的使用

    作用:同一个进程空间并发运行多个操作,专业术语简称为:[多线程] 1.任务函数不带参数多线程 #!/usr/bin/env python # -*- coding: utf-8 -*- import ...

  7. [Python之路] 多种方式实现并发Web Server

    下面我们使用Python来实现并发的Web Server,其中采用了多进程.多线程.协程.单进程单线程非阻塞的方式. 一.使用子进程来实现并发Web Server 参照 https://www.cnb ...

  8. noi.ac #553 序列

    [题目描述] 老虎和蒜头是好朋友. 众所周知,蒜头经常给老虎出一些题目,而老虎也常常被难倒,作为捧杯之王的老虎难免心有怨怼.今天,老虎发现了蒜头的一个序列 a​ .虽然老虎不知道这个序列是用来做什么的 ...

  9. jquery判断元素是否可见隐藏

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...

  10. $\LaTeX$数学公式大全6

    $6\ Binary\ Operation/Relation\ Symbols$$\ast$ \ast$\star$ \star$\cdot$ \cdot$\circ$ \circ$\bullet$ ...