タイボナッチ数列 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
ほどく:
動的プログラミングのアイデアを使用する
コード:
class Solution {
public:
int tribonacci(int n) {
//处理特殊情况
if(n==0)return 0;
if(n==1||n==2)return 1;
vector<int> dp(n+1);
//初始化特殊位置的值
dp[0]=0;dp[1]=1;dp[2]=1;
//计算第n个泰波那契数
for(int i=3;i<=n;i++)
{
dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
}
return dp[n];
}
};
改善する
上記の方法を使用すると、時間計算量は O(N)、空間計算量は O(N)、改善された時間計算量は O(N)、空間計算量は O(1) になります。アイデアは、ローリング配列を使用することです。
改善されたコード:
class Solution {
public:
int tribonacci(int n) {
if(n==0)return 0;
if(n==1||n==2)return 1;
int a=0,b=1,c=1,ret=0;
for(int i=3;i<=n;i++)
{
ret=a+b+c;
a=b;
b=c;
c=ret;
}
return ret;
}
};