1137.第N个泰波那契数

1137. 第N个泰波那契数

贴个题目:

题目

贴个示例:

题目示例

解题思路:

这一题和斐波那契数列数列其实本质上是一样的,不过多了一个变量而已,相信大家都做过斐波那契数列,知道有两种方法:1、动态规划,2、递归

1、动态规划:

首先我们来介绍动态规划,为什么要用动态规划呢?因为动态规划比递归更加省时间,它能够减少递归那些重复计算的步骤。

我们使用t1代表第一个变量,t2代表第二个变量,t3代表第三个变量,中间应该用一个temp存储t3的值,因为t3=t1+t2+t3的时候会把t3给覆盖掉。

其实就是利用滚动数组的原理,不断计算下一个泰波那契数,然后覆盖,然后往下计算。
这里不使用动态规划数组的原因是,我们只需要知道最后的结果,中间的过程不需要知道,因此没有必要储存起来浪费空间。

动态规划代码:
int tribonacci(int n){
    if(n==0) return 0;
    int t1=0;//初始化数字
    int t2=1;
    int t3=1;
    for(int i=0;i<n-2;i++)//注意循环次数是n-2次
    {
        int temp=t3;//存储t3的初始值,方便等一下往下传递
        t3=t1+t2+t3;//t3等于泰波那契数
        t1=t2;//滚动储存
        t2=temp;//滚动储存t3
    }
    return t3;
}
性能分析:
时间分析:

这里我们进行了一次遍历,因此时间复杂度是:O(n)

性能分析:

只创建了常数个变量,因此是空间复杂度是:O(1)

2、递归法

这里使用递归会超时,虽然代码简洁明了(大概在第35个测试用例就会超时)

递归代码:
int tribonacci(int n){
    if(n==0||n==1||n==2) return n==0?0:1;
    return tribonacci(n-3)+tribonacci(n-2)+tribonacci(n-1);
}
性能分析:
时间分析:

使用递归的时候,画一个递归树:
递归树
可以看出,每个T都被分成3个子T,因此可以看出时间复杂度是:O(3^n)

空间分析:

没有新建变量,因此空间复杂度是:O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值