The Tribonacci sequence Tn is defined as follows: 
T0 = 0, T1 = 1, T2 = 1, and Tn+3 = Tn + Tn+1 + Tn+2 for n >= 0.
Given n, return the value of Tn.
Example 1:
Input: n = 4
Output: 4
Explanation:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
Example 2:
Input: n = 25
Output: 1389537
Constraints:
0 <= n <= 37
The answer is guaranteed to fit within a 32-bit integer, ie. answer <= 2^31 - 1.
class Solution:
    DP: List[int] = [0, 1, 1]
    
    def tribonacci(self, n: int) -> int:
        if n >= 0:
            if n < len(self.DP):
                return self.DP[n]
            else:
                offset: int = len(self.DP)
                self.DP.extend([0] * (n - offset + 1))
                for i in range(offset, n + 1):
                    self.DP[i] = self.DP[i - 3] + self.DP[i - 2] + self.DP[i - 1]
                return self.DP[n]
        else:
            raise ValueError

class Solution:
    DP: List[int] = [0, 1, 1]
    
    def tribonacci(self, n: int) -> int:
        if n >= 0:
            if n < len(self.DP):
                return self.DP[n]
            else:
                offset: int = len(self.DP)
                self.DP.extend([0] * (n - offset + 1))
                for i in range(offset, n + 1):
                    self.DP[i] = self.DP[i - 3] + self.DP[i - 2] + self.DP[i - 1]
                return self.DP[n]
        else:
            raise ValueError
