题目:
f(n)= 0 n=0
1 n=1
f(n-1)+f(n-2) n>1
答案:
普通的循环递归是不行的,时间复杂度大高
普通的代码:
if(n<+0)
return 0
if(n==1)
return1
return ...f(n-1)+f(n-2)
合理的代码为:
class Solution {
public:
int Fibonacci(int n) {
if(n<2)
return n;
int a=0,b=1;
int result=0;
for(int i=1;i<n;i++){
result=a+b;
a=b;
b=result;
}
retujavascript:void(0);rn result;
}
};
代码思路:其实就是减少了一个计算该项的前两项的值的过程,即将每项的结果存到一个变量里,下次直接调用就行。
答案:
class Solution {
public:
int jumpFloor(int number) {
if(number <=2)
return number;
int a=0,b=1,result=0;
for (int i=0;i<number;i++){ //i=0这部分注意
result=a+b;
a=b;
b=result;
}
return result;
}
};
变态跳台阶问题
题目:
答案:
class Solution {
public:
int jumpFloorII(int number) {
if(number <=2)
return number;
int a=1,b=1,result=0;
for (int i=1;i<number;i++){
result=2*b;
a=b;
b=result;
}
return result;
}
};