题目
简单描述:据整数n返回表达式T(n)的最终结果
思路
1、利用递归的方式。
当n = 0,返回 0
当n = 1、2,返回1
当n >2,递归返回T(n-1)+T(n-2)+T(n-3)
递归试了一下,结果超出时间限制了啊啊啊
当n = 34时,运行不下去咯。看了一下,当n>3时,最后返回的结果调用了3次递归函数。时间复杂度的增加也是不可忽视啊。。。鱼是想到了第二种方法
2、保存表达式的方式。
随后想到了一种,方法,遍历一次计算T(n),期间用4个变量保存T(n-1)、T(n-2)、T(n-3),T(n)
图表解析如下:
当for循环中i = n 时,c中存放的即是T(n)。
代码
class Solution {
public:
int tribonacci(int n) {
if(n == 0) //当n为0时
return 0;
else if( n == 1|| n == 2 ) //当n为1或2
return 1;
else{ //当n大于等于3
int a = 0, b = 1, c = 1,d; //a记录T(n-3),b记录T(n-2),c记录T(n-1),d记录T(n)
for (int i = 3; i <= n; i++) {
d = a + b + c; //新的T(n)
a = b; //新的T(n-3)
b = c; //新的T(n-2)
c = d; //新的T(n-1)
}
return c; //T(n)存于c
}
}
};
运行结果
有一说一,这执行用时,,,我觉得好(~ ̄▽ ̄)~
不过这空间复杂度该咋降下来?!