赞
踩
难度简单86收藏分享切换为英文接收动态反馈
泰波那契序列 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
answer <= 2^31 - 1
。-------------------------------------分割线------------------------------------------
一看到这个题目,相信很多人都会像我一样,直接按递归来写,提交代码之后,不好意思,执行超时了。深思熟虑之后,只能使用动态规划,不适用递归,空间换时间
代码如下
- int tribonacci(int n){
-
- #if 0 //纯递归,超时
-
- if(n==0)
- return 0;
- if(n==1)
- return 1;
- if(n==2)
- return 1;
- return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3);
-
- #else//动态规划,空间换时间
- int *f;
- f = malloc(sizeof(int)*(n+3));//多三个,这样输入n 为0,1,2的时候,给数组赋值不踩内存
- f[0]=0;
- f[1]=1;
- f[2]=1;
- for(int i=3;i<=n;i++){
- f[i]=f[i-1]+f[i-2]+f[i-3];
- }
- return f[n];
- #endif
- }
另外,我觉得评论区会有秀儿会穷举出来,因为题目n的范围也就[0, 37],被我猜到了。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。