LeetCode1137第 N 个泰波那契数

题目

在这里插入图片描述
简单描述:据整数n返回表达式T(n)的最终结果

思路

1、利用递归的方式。
当n = 0,返回 0
当n = 1、2,返回1
当n >2,递归返回T(n-1)+T(n-2)+T(n-3)
递归试了一下,结果超出时间限制了啊啊啊
在这里插入图片描述
当n = 34时,运行不下去咯。看了一下,当n>3时,最后返回的结果调用了3次递归函数。时间复杂度的增加也是不可忽视啊。。。鱼是想到了第二种方法
2、保存表达式的方式。
随后想到了一种,方法,遍历一次计算T(n),期间用4个变量保存T(n-1)、T(n-2)、T(n-3),T(n)
图表解析如下:
在这里插入图片描述

当for循环中i = n 时,c中存放的即是T(n)。

代码

class Solution {
public:
    int tribonacci(int n) {
        if(n == 0)	//当n为0时
            return 0;
        else if( n == 1|| n == 2 )	//当n为1或2
            return 1;
        else{	//当n大于等于3
            int a = 0, b = 1, c = 1,d;    //a记录T(n-3),b记录T(n-2),c记录T(n-1),d记录T(n)
            for (int i = 3; i <= n; i++) {
                d = a + b + c;  //新的T(n)
                a = b;  //新的T(n-3)
                b = c;  //新的T(n-2)
                c = d;  //新的T(n-1)
        }
        return c;   //T(n)存于c
        }
    }
};

运行结果

在这里插入图片描述
有一说一,这执行用时,,,我觉得好(~ ̄▽ ̄)~
不过这空间复杂度该咋降下来?!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值