题目:
解答:
一个数列,很简单,递推公式也给出了,做法类似于动态规划
n<=2时直接单列讨论,n>=3时初始化0/1/2三个数,后续直接递推即可。同动态规划的方法,用变量暂存数据进行空间优化。
class Solution {
public:
int tribonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
if(n==2) return 1;
int tn,tn_1,tn_2;
tn=0;
tn_1=1;
tn_2=1;
long ans=tn+tn_1+tn_2;
while(n>3){
tn=tn_1;
tn_1=tn_2;
tn_2=ans;
ans=tn+tn_1+tn_2;
n--;
}
return ans;
}
};
时间复杂度O(n),空间复杂度O(1)
也可以用官方题解矩阵快速幂,有点类似于状态方程的思想了。可以优化时间复杂度至O(logn)