跳过正文

No.1137 第N个泰波那契数

·467 字·1 分钟
曙光磁铁
作者
曙光磁铁

泰波那契序列 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
  • 答案保证是一个 32 位整数,即 answer <= 2^31 - 1

思路分析
#

通过观察,发现题目要求的是一个数列的和。而且这个数列可以通过前面的3项来计算得到后面的一项。因此我们可以用最简单的暴力算法来做。 也就是我们新建一个数组,里面有固定的三项[0,1,1]。这是题目中给我们的条件,然后我们根据给入的n去计算到我们需要的地方,就可以获得第 N 个泰波那契数了

Rust代码
#

# struct Solution;
impl Solution {
    pub fn tribonacci(n: i32) -> i32 {
        let n = n as usize;
        let mut v = vec![0, 1, 1];
        let mut cur_len = 3;
        while cur_len <= n {
            v.push(v[cur_len - 1] + v[cur_len - 2] + v[cur_len - 3]);
            cur_len += 1;
        }
        v[n]
    }
}

运行效果
#

# fn main() {
# pub fn tribonacci(n: i32) -> i32 {
#    let n = n as usize;
#    let mut v = vec![0, 1, 1];
#    let mut cur_len = 3;
#    while cur_len <= n {
#        v.push(v[cur_len - 1] + v[cur_len - 2] + v[cur_len - 3]);
#        cur_len += 1;
#    }
#    v[n]
# }
println!("{:?}", tribonacci(2));
# }