剑指Offer(Java实现):用两个栈实现队列

题目
写一个函数,输⼊入n,求斐波那契数列的第n项 (一只⻘青蛙一次可以跳上1级台阶,也可以跳上2级。求该⻘青蛙跳上一个n级台阶总共有多少种跳法)

解题
从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)…以此类推就可以算出第n项了。时间复杂度为O(n).

代码

private static long fibonaci(int n){
	long[] a = {0,1};
	if(n<2)
		return a[n];
	long fibone = 0;
	long fibtwo = 1;
	long fibN = 0;
	
	for(int i = 2;i<=n;i++){
	fibN = fibone + fibtwo;
	fibone = fibtwo;
	fibtwo = fibN;
	}
	return fibN;
}

//时间复杂度比较高的简单方法
private static int getfib(int n){
	if(n == 0&&n == 1&&n == 2)
		return n;
	
	return getfib(n-1)+getfib(n-2);

}

ps:
简单方法因为重复计算太多,所以造成时间复杂度比较高
在这里插入图片描述

发布了49 篇原创文章 · 获赞 4 · 访问量 2521

猜你喜欢

转载自blog.csdn.net/weixin_42040292/article/details/103748442
今日推荐