LC 1137.N-th Tribonacci Number
题目描述
这是 LeetCode
上的 1137.
第 N 个泰波那契数 ,难度为简单。
泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n
,请返回第 n 个泰波那契数 Tn 的值。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
0 <= n <= 37
- 答案保证是一个 32 位整数,即
answer <= 2^31 - 1
。
解答
方法一:动态规划
给出了递推的方程之后,就是给出了状态转移方程,直接类似斐波那契数列模拟一下,为了不用处理特殊情况,向前递推两项。
1 |
|
时间复杂度:\(O(n)\) ,其中
n
为数字n
的大小。空间复杂度:\(O(1)\)。
方法二:矩阵快速幂
不了解矩阵快速幂的可以参看LC 0070.Climbing Stairs - Abel's Blog (chen-hu和快速幂,使用矩阵快速幂可以降低时间复杂度。
首先构建一个递推关系的矩阵形式: \[
\begin{bmatrix}
1 & 1 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0
\end{bmatrix}
\begin{bmatrix}
T(n) \\
T(n - 1) \\
T(n - 2)
\end{bmatrix}
=
\begin{bmatrix}
T(n) + T(n - 1) + T(n - 2) \\
T(n) \\
T(n - 1)
\end{bmatrix}
=
\begin{bmatrix}
T(n + 1) \\
T(n) \\
T(n - 1)
\end{bmatrix}
\] 因此: \[
\begin{bmatrix}
T(n + 2) \\
T(n + 1) \\
T(n)
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0
\end{bmatrix}
^n
\begin{bmatrix}
T(2) \\
T(1) \\
T(0)
\end{bmatrix}
\] 令: \[
M =
\begin{bmatrix}
1 & 1 & 1 \\
1 & 0 & 0 \\
0 & 1 & 0
\end{bmatrix}
\] 因此只要能够快速计算矩阵 M
的 n
次幂,就可以快速得到 T(n)
的值。如果直接求 \(M^n\) ,时间复杂度为 \(O(n)\)
,可以定义矩阵乘法,然后用快速幂来加速计算 \(M^n\)。
1 |
|
时间复杂度:\(O(\log n)\),其中
n
为数字n
的大小,每次数字都折半。空间复杂度:\(O(1)\)。