您的位置:首页 > Web前端

[剑指offer]算法8 青蛙跳台阶问题

2017-10-28 19:12 316 查看

题目描述1

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

时间限制:1秒空间限制:32768K

【问题分析】刚开始我对于这道题目我想的相当的复杂,我说出来可以共勉一下,如果真的能研究处理来那就更好了。我是根据2的次方来确定每次跳几个台阶,如果是2的0次方,那就是1个,如果是2的1次方,那就是2个,那么你就会得到很多的101010001类似于这样的序列然后从中找规律就行。结果呢,我就是没想出来。第二个方法呢,我就从1个台阶开始算从中找规律结果还真是巧,符合斐波那契数列。所以这道题目用斐波那契数列来完成。既然知道了方法,那就很好办了。链接:http://blog.csdn.net/h2677lucy/article/details/78377966,这里面就是求解斐波那契数列的两个方法,递归和纯算数。

题目描述2

一只青蛙一次可以跳上1级台阶,也可以跳上2级,...,也可以跳n个台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。网上是这么分析的,而且我代码也通过了

因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级

跳1级,剩下n-1级,则剩下跳法是f(n-1)

跳2级,剩下n-2级,则剩下跳法是f(n-2)

所以f(n)=f(n-1)+f(n-2)+...+f(1)

因为f(n-1)=f(n-2)+f(n-3)+...+f(1)

所以f(n)=2*f(n-1)

public class Solution {

public int JumpFloorII(int n) {

if(n<=1) {

return 1;

}else {

return 2*JumpFloorII(n-1);

}

}

}

测试类代码

package Offer;

public class offer8 {

public static void main(String[] args) {

offer8 o8=new offer8();

System.out.println(o8.f(8)+"H");

}

public int f(int n) {

if(n<=1) {

return 1;

}else {

return 2*f(n-1);

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: