首页
编程语言

分类

当前位置: 天天编程网 > 技术新闻 > 编程语言 >正文

LeetCode 1137[第N个泰波那契数]

更新时间:2024-11-07  作者:佚名   来源: 网络转载

LeetCode 1137[第N个泰波那契数]

题目

链接

LeetCode 1137[第N个泰波那契数]

详情

LeetCode 1137[第N个泰波那契数]

实例

实例1

LeetCode 1137[第N个泰波那契数]

实例2

LeetCode 1137[第N个泰波那契数]

提示

LeetCode 1137[第N个泰波那契数]

题解

思路一[递归]

当 n 为 0, 1, 2 时,直接返回对应的值

当 n 大于 2 时,开始用 f(n+3) = f(n) + f(n+1) + f(n+2) 来递归求值

代码一[此代码在力扣会超出时间限制]

class Solution {
public:
    int tribonacci(int n) {
        
        if (0 == n)
            return 0;
        
        if ((1 == n) || (2 == n))
            return 1;

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

思路二[循环代替递归]

当 n 为 0, 1, 2 时,直接返回对应的值

当 n 大于 2 时,开始用 f(n+3) = f(n) + f(n+1) + f(n+2) 来递归求值

由于递归是不停的复制粘贴,在运行时需要大量的时间,当 n 数值过大时,就会超过力扣官方限制的时间

因此此处采用循环代替递归的方法

此处的循环体为: f(n+3) = f(n) + f(n+1) + f(n+2) 

循环由 3 开始,由 n 结束,依次进入循环体求值,直到求出最后的 f(n) 的值并返回

代码二[此为成功代码]

class Solution {
public:
    int tribonacci(int n) {
        
        if (0 == n)
            return 0;
        
        if ((1 == n) || (2 == n))
            return 1;

        int a0 = 0, a1 = 1, a2 = 1;

        int iRet = 0;

        for (int i = 3; i < n + 1; i++)
        {
            iRet = a0 + a1 + a2;

            a0 = a1;
            a1 = a2;
            a2 = iRet;
        }

        return iRet;
    }
};
上一篇:这款Chrome 插件,使浏览器页面快速滑动到最底部和最顶部,并且还能... 下一篇:11.SpringCloudAlibabaNacos服务注册和配置中心
小编推荐
快速导航更多>>
JavaScript 教程 HTML5 教程 CSS3 教程 jQuery 教程 Vue.js 教程 Node.js 教程 SQL 教程 C 教程 PHP 教程 Linux 教程 Docker 教程 Nginx 教程 Python 教程 Java 教程

天天编程网 版权所有

陕ICP备2023002928号-1