首页 > 其他分享 >3599、第 N 个泰波那契数

3599、第 N 个泰波那契数

时间:2023-02-14 14:04:05浏览次数:40  
标签:契数 Tn assertEquals 3599 个泰波 tribonacci Assert test array

泰波那契序列 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


提示:


0 <= n <= 37

答案保证是一个 32 位整数,即 answer <= 2^31 - 1。


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/n-th-tribonacci-number

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.recursion;

/**

* 1137. 第 N 个泰波那契数 <br/>

* 泰波那契序列 Tn 定义如下: <br/>

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

* 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。<br/>

*

* 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

*

* @author [email protected]

*

* 2022-3-9

*/

public class NthTribonacciNumber {

/* 示例 1:



输入:n = 4

输出:4

解释:

T_3 = 0 + 1 + 1 = 2

T_4 = 1 + 1 + 2 = 4

示例 2:



输入:n = 25

输出:1389537





提示:



0 <= n <= 37

答案保证是一个 32 位整数,即 answer <= 2^31 - 1。*/

public int tribonacci(int n) {

if (n == 0) {

return 0;

} else if (n == 1) {

return 1;

} else if (n == 2) {

return 1;

} else {

// t(n)=t(n-3)+t(n-2)+t(n-1)

return tribonacci(n - 3) + tribonacci(n - 2) + tribonacci(n - 1);

}

}

public int tribonacciDp(int n) {

if (n == 0) {

return 0;

} else if (n == 1) {

return 1;

} else if (n == 2) {

return 1;

}

// 额外维护1个数组,看起来更清晰

int[] array = new int[n + 1];

array[0] = 0;

array[1] = 1;

array[2] = 1;

for (int index = 3; index <= n; index++) {

// t(n)=t(n-3)+t(n-2)+t(n-1)

array[index] = array[index - 3] + array[index - 2] + array[index - 1];

}

return array[n];

}

}
package test.leecode.recursion;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.recursion.NthTribonacciNumber;

/**

* @author [email protected]

*

* 2022-3-12

*/

public class NthTribonacciNumberTest {



@Test

public void test() {

NthTribonacciNumber test = new NthTribonacciNumber();

Assert.assertEquals(0, test.tribonacci(0));

Assert.assertEquals(1, test.tribonacci(1));

Assert.assertEquals(1, test.tribonacci(2));

Assert.assertEquals(2, test.tribonacci(3));

Assert.assertEquals(4, test.tribonacci(4));

Assert.assertEquals(1389537, test.tribonacci(25));

}

@Test

public void testDp() {

NthTribonacciNumber test = new NthTribonacciNumber();

Assert.assertEquals(0, test.tribonacciDp(0));

Assert.assertEquals(1, test.tribonacciDp(1));

Assert.assertEquals(1, test.tribonacciDp(2));

Assert.assertEquals(2, test.tribonacciDp(3));

Assert.assertEquals(4, test.tribonacciDp(4));

Assert.assertEquals(1389537, test.tribonacciDp(25));

}

}

标签:契数,Tn,assertEquals,3599,个泰波,tribonacci,Assert,test,array
From: https://blog.51cto.com/fansunion/6056745

相关文章

  • 菲波那契数列(2)
    菲波那契数列(2)时间限制:1000ms      内存限制:65536KB提交数:1990   通过数:661 【题目描述】菲波那契数列是指这样的数列:数列的第一个和第二个......
  • Java斐波那契数列实例
      在斐波那契数列中,下一个数字是前两个数字的总和,例如:0,1,1,2,3,5,8,13,21,34,55等。斐波那契数列的前两个数字是0和1,第三个数字是前两个数字的和,也就是0+1=1,所以这......
  • 【闲话】1.27 斐波那契数列一个性质及推广
    众所周知众所周知,斐波那契数列有一个性质:\[\gcd(f_{n},f_{m})=f_{\gcd(n,m)}\]在证明他之前,先来看个引理:\(\text{Lemma}\1\)\[f_{n+m}=f_{n}\timesf_{m-1}+f_{n+1......
  • 迭代:求第n个斐波那契数(不考虑溢出)
    斐波那契数列:前两个数之和等于第三个数(如11235813213455......)描述第n个斐波那契数列:由图Fibn<=21n>2Fib(n-1)+Fib(n-2)可知#include<stdio.h>intFib(intn){i......
  • 斐波那契数列的多种实现和性能
    目录0.普通斐波那契1.结果缓存2.自动化结果缓存3.迭代4.生成器0.普通斐波那契importtimestart=time.time()deffib0(n:int)->int:ifn<2:......
  • SQL Server 斐波那契数列
    斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现......
  • 斐波那契数
    一、背景与定义      有这样一个数列1,1,2,3,5,8,13,21,34,55,89,144,……这个数列前两个数均为1,从第3项开始,每一项都等于前两项之和。        数列最早被提出是,......
  • 509. 斐波那契数列
    问题描述https://leetcode.cn/problems/fibonacci-number/description/解题思路最经典的递归问题,它的问题描述就是递归的。先考虑参数和返回值。参数就是n,返回值是fib(......
  • 求第n个斐波那契数。(用递归和循环的方法对比)
    写这个代码的过程中出现的问题及改进方法:用递归实现#include<stdio.h>intFib(intn){if(n<=2)return1;elsereturnFib(n-1)+Fib(n-2);}......
  • 1、尾递归及优化 ,例:斐波那契数列 2、递归转循环,蹦床函数
    1、函数调用自身,即为递归,在return时调用自身,即为尾递归;递归非常消耗内存,其原因是需要同时保存成成百上千的调用帧,这容易发生栈溢出错误;但是尾递归只存在一个调用帧,所以永......