下面要给大家分享的实例同样是和跳台阶相关的内容,一起来看看具体的题目,以及解题思路和实现方式吧。
题目:
一只青蛙一次能够跳上1级台阶,也能够跳上2级台阶。
求:
这只青蛙跳上一个n级台阶一共的跳法有多少种?
注:
先后次序不同算不同的结果
思路1:
对于这个题目的话,前提是只有1次1阶或者是2阶的跳法
1、假如2种跳法,1阶或者是2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1)
2、假如,第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)
3、由a假设可以得出总跳法为:f(n)=f(n-1)+f(n-2)
4、之后通过实际的情况可以得出:只有一阶的时候f(1)=1 ,只有两阶的时候可以有f(2)=2
5、最终得出一个斐波那契数列:
代码实现:
public class Solution { public int JumpFloor(int target) { if (target <= 0) { return -1; } else if (target == 1) { return 1; } else if (target ==2) { return 2; } else { return JumpFloor(target-1)+JumpFloor(target-2); } } }
思路2:
这道题假如用递归的话提交会显示以下的情况:
运行超时:
您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
所以考虑用迭代解决。
代码实现:
public int JumpFloor(int target) { if(target == 1 || target == 2) { return target; } // 第一阶和第二阶考虑过了,初始当前台阶为第三阶,向后迭代 // 思路:当前台阶的跳法总数=当前台阶后退一阶的台阶的跳法总数+当前台阶后退二阶的台阶的跳法总数 int jumpSum = 0;// 当前台阶的跳法总数 int jumpSumBackStep1 = 2;// 当前台阶后退一阶的台阶的跳法总数(初始值当前台阶是第3阶) int jumpSumBackStep2 = 1;// 当前台阶后退二阶的台阶的跳法总数(初始值当前台阶是第3阶) for(int i = 3; i <= target; i++) { jumpSum= jumpSumBackStep1 + jumpSumBackStep2; jumpSumBackStep2 = jumpSumBackStep1;// 后退一阶在下一次迭代变为后退两阶 jumpSumBackStep1 = jumpSum; // 当前台阶在下一次迭代变为后退一阶 } return jumpSum; }
思路3:
对于第n个台阶来说,只能从n-1或者是n-2的台阶跳上来。
所以,F(n) = F(n-1) + F(n-2)
斐波拉契数序列,初始条件
n=1:只能一种方法
n=2:两种方法
递归一下就可以了。
代码实现:
class Solution { public: int jumpFloor(int number) { if(number <= 0) return 0; else if(number == 1) return 1; else if(number == 2) return 2; else return jumpFloor(number-1) + jumpFloor(number-2); } };
更多java实例,请继续关注本站了解吧!更多实例内容,可以分享给大家呢。
推荐阅读: