题目分析:
示例 1:
示例 2:
思路分析:
代码实现:
class Solution {
public int tribonacci(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
return dfs (n);
}
public int dfs(int n) {
int sum = 0;
int[] arr = new int[n + 1];
arr[1] = 1;
arr[2] = 1;
for (int i = 3; i <= n; i++) {
arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3];
}
return arr[n];
}
}
递归写法(超时)
class Solution {
public int tribonacci(int n) {
return dfs (n);
}
public int dfs(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
return dfs(n - 1) + dfs(n - 2) + dfs(n - 3);
}
}
递归优化(时间复杂度打败100%)
class Solution {
public int[] arr;
public int tribonacci(int n) {
arr = new int[n + 1];
return dfs (n);
}
public int dfs(int n) {
if (n == 0) {
return 0;
}
if (n == 1 || n == 2) {
if (arr[n] == 0) arr[n] = 1;
}
if (arr[n] == 0) {
arr[n] = dfs(n - 1) + dfs(n - 2) + dfs(n - 3);;
} else {
return arr[n];
}
return dfs(n - 1) + dfs(n - 2) + dfs(n - 3);
}
}