2018做网站的视频,网页制作与网站建设答案,如何建设网站和app,广东建设职业技术学院官方网站#x1f388;算法那些事专栏说明#xff1a;这是一个记录刷题日常的专栏#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目#xff0c;在这立下Flag#x1f6a9; #x1f3e0;个人主页#xff1a;Jammingpro #x1f4d5;专栏链接… 算法那些事专栏说明这是一个记录刷题日常的专栏每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目在这立下Flag 个人主页Jammingpro 专栏链接算法那些事 每日学习一点点技术累计看得见 题目
题目描述
泰波那契序列 T n T_{n} Tn 定义如下 T 0 T_{0} T0 0, T 1 T_{1} T1 1, T 2 T_{2} T2 1, 且在 n 0 的条件下 T n 3 T_{n3} Tn3 T n T_{n} Tn T n 1 T_{n1} Tn1 T n 2 T_{n2} Tn2
给你整数 n请返回第 n 个泰波那契数 T n T_{n} Tn 的值。
执行示例 示例 1 输入n 4 输出4 解释 T 3 T_{3} T3 0 1 1 2 T 4 T_{4} T4 1 1 2 4 示例 2 输入n 25 输出1389537 提示
0 n 37 答案保证是一个 32 位整数即 answer 2^31 - 1。
题解
这道题给了状态转移方程也就是递推公式 T n 3 T_{n3} Tn3 T n T_{n} Tn T n 1 T_{n1} Tn1 T n 2 T_{n2} Tn2我们可以对它做一个变形即 T n T_{n} Tn T n − 1 T_{n-1} Tn−1 T n − 2 T_{n-2} Tn−2 T n − 3 T_{n-3} Tn−3。从变形后的式子可知求第n个泰波那契数就必须知道第n-1、n-2、n-3个泰波那契数的数值。题目中给出了前3个泰波那契数的数值即 T 0 T_{0} T0 0, T 1 T_{1} T1 1, T 2 T_{2} T2 1。所以我们可以计算 T 3 T_{3} T3 T 2 T_{2} T2 T 1 T_{1} T1 T 0 T_{0} T00112 T 4 T_{4} T4 T 3 T_{3} T3 T 2 T_{2} T2 T 1 T_{1} T12114…以此类推。我们来看一下实现的代码↓↓↓
class Solution {
public:int tribonacci(int n) {if(n 0) return 0;if(n 1) return 1;vectorintdp(n 1);dp[0] 0;dp[1] dp[2] 1;for(int i 3; i n; i)dp[i] dp[i - 1] dp[i - 2] dp[i - 3];return dp[n];}
};上面代码的时空复杂度均为O(N)我们可以使用滚动数组将空间复杂度降为O(1)。这里的滚动数组也就是4个变量我们将4个变量分别设置为cur、pre、ppre、morepre分别保存第n号数、第n-1号数、第n-2号数、第n-3号数。因为我们计算第n号数时仅需要前3号数因此我们可以通过3个变量保存前3号数还需要1个变量保存前3号数相加的结果。通过morepreppre、pprepre、precur来更新各个数值以求出第n号数的数值。 ps例如morepre、ppre、pre分别保存第0号、第1号、第2号数的值cur保存前3个变量的加和即求出第3号数的数值。通过执行morepreppre、pprepre、precurmorepre、ppre、pre此时分别保存第1号、第2号、第3号数的值再使用cur保存前3个变量的加和就可以求出第4号数的数值以此类推…
class Solution {
public:int tribonacci(int n) {if(n 0) return 0;if(n 1 || n 2) return 1;int morepre 0, ppre 1, pre 1, cur 2;for(int i 3; i n; i){morepre ppre;ppre pre;pre cur;cur morepre ppre pre;}return cur;}
};本文存在不足欢迎留言或私信批评、指正。希望我的解决方法能够对你有所帮助~~ 今日打卡完成点亮小星星☆→★