总结的部分题目思路与代码,待完善。
【剑指offer-第二版】部分题目与解答【C++版本】
题目:
斐波那契数列
求斐波那契数列的第n项。斐波那契数列的定义如下:
f(0) = 0;
f(1) = 1;
f(n) = f(n - 1) + f(n - 2); n >= 2
解题思路:
1.使用递归的方法是最简单的,但是效率成问题,有很多重复的计算。其实就是一种自顶向下的思想。
2.使用自底向上的思想,从n=2开始计算,并且每次保存前面两次计算的结果,以此进行下一次计算,这样就不会有重复的计算。复杂度为O(n)。
3.注意一旦n过大,就会超出long long的范围变成一个大数问题。
可以AC的解法【C++版本】
int Fibonacci(int n) {
if(n == 0)
return 0;
if(n == 1)
return 1;
int resu;
int pre = 1,prepre = 0;
for(int i = 1;i != n;i++){
resu = pre+prepre;
prepre = pre;
pre = resu;
}
return resu;
}
//相关题目:青蛙跳台阶问题
题目一:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少总跳法
这其实就是一个斐波那契数列问题。
题目二:青蛙跳台阶,一次可以跳1、2、3……n级,那么该青蛙跳上n级总共有多少总跳法?f(n) = f(n-1) + f(n-1) + …… + f(1)