题目出处:https://leetcode-cn.com/problems/n-th-tribonacci-number/
1. 递归解法
class Solution {
public:
int tribonacci(int n) {
if(n == 0){
return 0;
}
if(n == 1){
return 1;
}
if(n == 2){
return 1;
}
return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3);
}
};
2. 带备忘录递归解法
class Solution {
private:
vector<int> memo;
public:
int digui(int n, vector<int>& memo){
if(memo[n] != -1){
return memo[n];
}
memo[n] = digui(n-1, memo)+digui(n-2, memo)+digui(n-3, memo);
return memo[n];
}
int tribonacci(int n) {
if(n == 0){
return 0;
}
if(n == 1 || n == 2){
return 1;
}
memo.resize(n+1, -1);
memo[0] = 0; memo[1] = 1; memo[2] = 1;
return digui(n, memo);
}
};
3. 动态规划解法
class Solution {
public:
int tribonacci(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
if(n == 2) return 1;
vector<int> f(n+1,0);
f[0] = 0;
f[1] = 1;
f[2] = 1;
for(int i = 3; i <= n; i++){
f[i] = f[i-1] + f[i-2] + f[i-3];
}
return f[n];
}
};