Problem Statement
leetcode problem link
My Solution [Accepted]
public class Solution {
public int Tribonacci(int n) {
if (n == 0)
return 0;
if (n == 1 || n == 2)
return 1;
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 1;
for (int i = 3; i < n + 1; i++) {
dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
}
return dp[n];
}
}
Editorial
Approach 1: Dynamic Programming (Top Down)
class Solution:
def tribonacci(self, n: int) -> int:
dp = {0: 0, 1: 1, 2: 1}
def dfs(i):
if i in dp:
return dp[i]
dp[i] = dfs(i - 1) + dfs(i - 2) + dfs(i - 3)
return dp[i]
return dfs(n)
Approach 2: Dynamic Programming (Bottom Up)
class Solution:
def tribonacci(self, n: int) -> int:
if n < 3:
return 1 if n else 0
dp = [0] * (n + 1)
dp[1] = dp[2] = 1
for i in range(3, n + 1):
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
return dp[n]
Approach 3: Better Dynamic Programming (Bottom Up)
class Solution {
public:
int tribonacci(int n) {
if (n < 3) {
return n > 0 ? 1 : 0;
}
int a = 0, b = 1, c = 1;
for (int i = 0; i < n - 2; ++i) {
int tmp = a + b + c;
a = b;
b = c;
c = tmp;
}
return c;
}
};
class Solution:
def tribonacci(self, n: int) -> int:
if n < 3:
return 1 if n else 0
a, b, c = 0, 1, 1
for _ in range(n - 2):
a, b, c = b, c, a + b + c
return c