一、搜题原因:
这个题目说起来有点意思 我本来是搜索的dfs的专题然后leetcode的后台给我呈现了这样一个题目 话不多说 上题:
2.题目分析:
这个题目是说的泰伯那切数列 , 要求给出一个整数n , 要求返回一个第n个数列的值 ; 看到题目 首先不应该考虑算法问题 , 首先应该是要可以把这个题目解出来 然后在考虑算法优化 现在就听听我的分析 :
1.首先分析测试用例:
T3 = 0 + 1 + 1 ----> 2
= t0 + t1+ t2----> 2 ;l
T4 = 1 + 1 + 2 ------> 4
= t1 + t2 + t3 --------> 4 ;
这不难看出一个规律 :
要求项 = 该项的前三项数字之和 ;
2.考虑要使用的数据结构:
这里我想都没想 直接使用栈结构 原因就是它的特性:
FIFO 能够狠好的拿到我想要的元素
3.考虑细节:
这里的循环项应该是从第三项开始的 ; (这是一个小细节哦)
3.核心代码:
分析完毕了 来上核心代码 :
static void TBBQ(int n ){
int sum = 0 ;//保存上一次结果 和 最终结果的变量
Stack<Integer> stack =new Stack() ;//栈结构
/*
stack.push(0) ;
stack.push(1) ;
stack.push(1);
注意: 所有遍历的数前三项是不变的 所以需要提前把前三项入栈
*/
stack.push(0) ;
stack.push(1) ;
stack.push(1);
if (n == 0 || n ==1 || n==2){
System.out.println(stack.elementAt(n));
}
for (int i = 3 ; i <=n ; i++){
sum = stack.peek()+stack.elementAt(stack.size()-2)+stack.elementAt(stack.size()-3);
stack.push(sum);
}
System.out.println(sum);
}
4.最终代码:
import java.util.Stack;
public class 泰伯那切数列 {
public static void main(String[] args) {
int n = 25 ;
TBBQ(n); ;
}
static void TBBQ(int n ){
int sum = 0 ;
Stack<Integer> stack =new Stack() ;
stack.push(0) ;
stack.push(1) ;
stack.push(1);
if (n == 0 || n ==1 || n==2){
System.out.println(stack.elementAt(n));
}
for (int i = 3 ; i <=n ; i++){
sum = stack.peek() + stack.elementAt(stack.size()-2)+stack.elementAt(stack.size()-3);
stack.push(sum);
}
System.out.println(sum);
}
}