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

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

标题

链接

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


实例

实例1


实例2


提示


题解

思路一[递归]

当 n 为 0, 1, 2 时,直接返回对应的值
当 n 大于 2 时,开始用 f(n+3) = f(n) + f(n+1) + f(n+2) 来递归求值
代码一[此代码在力扣会超出时间限制]
  1. class Solution {
  2. public:
  3.     int tribonacci(int n) {
  4.         
  5.         if (0 == n)
  6.             return 0;
  7.         
  8.         if ((1 == n) || (2 == n))
  9.             return 1;
  10.         return tribonacci(n - 3) + tribonacci(n - 2) + tribonacci(n - 1);
  11.     }
  12. };
复制代码
思路二[循环代替递归]

当 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) 的值并返回
代码二[此为成功代码]
  1. class Solution {
  2. public:
  3.     int tribonacci(int n) {
  4.         
  5.         if (0 == n)
  6.             return 0;
  7.         
  8.         if ((1 == n) || (2 == n))
  9.             return 1;
  10.         int a0 = 0, a1 = 1, a2 = 1;
  11.         int iRet = 0;
  12.         for (int i = 3; i < n + 1; i++)
  13.         {
  14.             iRet = a0 + a1 + a2;
  15.             a0 = a1;
  16.             a1 = a2;
  17.             a2 = iRet;
  18.         }
  19.         return iRet;
  20.     }
  21. };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表