Dynamic Programming学习笔记 (26) - 第N个泰波那契数 (力扣# 1137)

111 阅读1分钟

本题出自力扣题库第1137题。题面大意如下:

泰波那契序列 Tn 定义如下: 
T[0] = 0, T[1] = 1, T[2] = 1, 且在 n >= 0 的条件下 T[n+3] = T[n] + T[n+1] + T[n+2]
给定一个整数 n,返回第 n 个泰波那契数 T[n] 的值。

这个数字序列是在斐波那契数列基础上发展而来,序列的头三个数字已知,后续的每个数字都是前三个数字之和,那么与斐波那契数列一样,我们可以使用DP来计算该数列中各个元素的值。Java代码如下:

class Solution {
    public int tribonacci(int n) {
        int[] dp = new int [n + 1];
        for (int i = 1; i <= n; i ++) {
            int t;
            if (i == 1) {
                t = 1;
            } else if (i == 2) {
                t = 1;
            } else {
                t = dp[i - 3] + dp[i - 2] + dp[i - 1];
            }
            dp[i] = t;
        }

        return dp[n];
    }
}

以上代码使用了一个O(n)的DP数组,我们也可以对空间复杂度进行进一步的优化为O(1)。