跳台阶问题-java

跳台阶问题

题目描述:

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

解析

这个问题归根结底还是一个费布拉奇数列,仔细找一下规律即可,刚开始做的时候我是直接写出前六个数的结果来找规律的。

一级台阶:1种 fib(1)=1

二级台阶:2种 fib(2)=2

三级台阶:3种 fib(3)=fib(1)+fib(2)=3

四级台阶:5种 fib(4)=fib(2)+fib(3)=5

五级台阶:8种 fib(5)=fib(3)+fib(4)=8

六级台阶:13种 fib(6)=fib(4)+fib(5)=13

现在看出规律了吧,fib(n)=fib(n-1)+fib(n-2),fib(1)=1,fib(2)=2。

java代码如下所示(直接在main函数中调用即可):

public int jumpFloor(int number) {
        if (number == 1)
            return 1;
        else if (number == 2)
            return 2;
        else
            return jumpFloor(number-1)+jumpFloor(number-2); 

    } 

变态跳台阶问题

题目描述

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

解析

这个也是如上所示的推理方法,没什么技术含量。写出前六个的跳台阶的结果,这个有一部分在上面的已经数出来了,所以我们就只要算上可以跳2阶台阶以上的结果就行了。然后算出

一级台阶:1种 f=fib(1)=1=2^1

二级台阶:2种 f=fib(2)=2=2^2

三级台阶:3种 f=fib(3)+1=4=2^3

四级台阶:5种 f=fib(4)+3=8=2^4

五级台阶:8种 f=fib(5)+8=16=2^5

六级台阶:13种 f=fib(6)+19=32=2^6

然后这个思路清晰了,代码就好写了,和上面类似,都是考察递归和循环的知识点。

public int jumpFloor2(int number) {
        if (number ==1)
            return 1;
        else if(number==2)
            return 2;
        else
            return jumpFloor2(number-1)*2;
    }

总结:

在做题的时候,刚开始总要学会动笔找一些规律,先想好思路,找出规律,把问题用数学方法找出解决规律办法,然后再用编程来实现。当然方法有很多种,实现的编程方法也可以是for循环,这个应该算是最简洁的代码实现方法吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 02:39:56

跳台阶问题-java的相关文章

青蛙跳台阶(Fibonacci数列)

问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n=3时,可以从n=1直接跳到n=3,也可以从n=2直接跳到n=3,及f(3)=f(1)+f(2)=3...,所以可以使用递归,自顶向下,一步一步求解,但是仔细分析一下,如果n=10,需要求得f(9)和f(8),而f(9)=f(8)+f(7),f(8)=f(7)+f(6),可以很明显看到,求了重复的f(

剑指offer 09变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. java版本: public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第4项的结果是:"+JumpFloorII(4)); long endTime=System.current

跳台阶问题

给定一个有N个台阶的楼梯,一个人从下到上开始跳台阶,这个人有两种跳的方式:一次跳一个台阶,一次跳两个台阶: 问:从台阶底端跳到台阶顶端,有多少种跳台阶的方式? 解法一:递归法 分析: 首先我们考虑最简单的情况.如果只有1个台阶,那么显然只有一种跳法:如果是2级台阶,那么有2种跳法.对于一个有n级台阶的楼梯来说,我们设跳法为 f(n) ,假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次,假如我们先跳2个台阶,则剩下 n-2 阶,跳法为 f(n-2):由此可以推出,对于一个n

剑指OFFER之变态跳台阶(九度OJ1389)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=50). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 6 样例输出: 32 解题思路: 这道题目跟之前的跳台阶大同小异,只是跳台阶的阶数从1变到了n,也就是说,不再是跳一下或者跳两下的问题,而是跳n下的问题.那么解题的思路显然还得逆向分析,我们

跳台阶问题的变种

在做跳台阶问题的时候,由于我的抽象能力不是太好,一直觉得这种规模比较大的问题难以理解,后来自己一想,这个问题不就是n个数,只能由1和2构成, 求共有多少种组成方式?一瞬间就理解了. f(n)=f(n-1)+f(n-2); 比如 f(4)=f(3)+f(2); 3的组成方式:1,1,1 1,2 2,1 2的组成方式:1,1 2 关于为什么是前两项之和其实有这样一个理解 当构成3的时候,只有一步选择就是1 当构成2的时候,其实有两种选择2和1,但是如果选择了1就构成了3,那么其实会与3的时候构成方式

变态跳台阶(递归算法)

台阶的级数:1,2,3,4,5,6..... 对应的跳法:1,2,4,8,16,32.... 最终结论 在n阶台阶,一次有1.2....n阶的跳的方式时,总得跳法为: | 1 ,(n=0 ) f(n) = | 1 ,(n=1 ) | 2*f(n-1) ,(n>=2) package suanfati; /* * 变态跳台阶 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级. * 求该青蛙跳上一个n级的台阶总共有多少种跳法. * 递归算法 */ public class Hig

[剑指Offer]2.变态跳台阶

题目 一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级--它也能够跳上n级. 求该青蛙跳上一个n级的台阶总共同拥有多少种跳法. 思路 用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1: 当n = 1 时. 仅仅有一种跳法,即1阶跳,即Fib(1) = 1; 当n = 2 时. 有两种跳的方式,一阶跳和二阶跳,即Fib(2) = Fib(1) + Fib(0) = 2; 当n = 3 时.有三种跳的方式,第一次跳出一阶台阶后,后面还有Fib(3-1)中跳法,第一次跳出二阶台阶后.

(原)剑指offer跳台阶和矩形覆盖

跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析同样为斐波那契数列边形这样的题肯定有公式 设n级台阶,总跳法 jumps n jumps 1 1 2 2 3 3 4 5 5 8 猜测 fbonicc(n) = fbonicc(n-1) + fbonicc(n-2) 3 4 5 111 1111 1111(1) 21  211  211(1) 12  121 121(1) 112 112(1)

斐波那契序列与跳台阶

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25337983 剑指offer上的第就题,简单题,在九度OJ上测试通过. 主要注意以下几点: 1.用非递归实现,递归会超时 2.结果要用long long保存,不然会发生结果的溢出,从而得到负值 3.如果是在VC++6.0下编译的,long long是illegal的,要用_int64代替,同时输出的转化以字符也要用%64d代替%lld 时间限制:1 秒 内存限制:32 兆 题目描述: 大