变态跳台阶(java)

题目描述(跳台阶)JumpFloorI
青蛙一次可以跳 上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)

递归:
斐波拉契数列的应用,n是台阶数,n=0输出1,n=1输出1,n=2输出2,n=3输出4…(0 <= n <= 100,这里台阶数是0时,也输出1)
青蛙跳到终点的最后一次跳跃有两种情况:
1、最后再跳1个台阶刚好到达终点
2、最后再跳2个台阶刚好到达终点
总的跳法:第一种情况的跳法+第二种情况的跳法
最后跳1个台阶,JumpFloor(n)跳法等于前(n-1)个台阶的跳法数JumpFloor(n-1)
最后跳2个台阶,JumpFloor(n)跳法等于前(n-2)个台阶的跳法数JumpFloor(n-2)
总的跳法:JumpFloor(n)=JumpFloor(n-1)+JumpFloor(n-2)
既斐波拉契数列的递归

public int JumpFloor(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        return JumpFloor(n-1)+JumpFloor(n-2);
    }

非递归写法

public int JumpFloor(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        int l = 1;
        int r = 1;
        int temp = 0;
        for (int i = 2; i <= n; i++) {
            temp = l + r;
            l = r;
            r = temp;
        }
        return temp;
    }

题目描述(变态跳台阶)JumpFloorII
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
输入:3
输出:4

解法1:
类似青蛙跳台阶思路,此时青蛙的最后一步可以是跳1,2…n个台阶到达终点,则总的跳法
JumpFloorII(n)=JumpFloorII(n-1)+JumpFloorII(n-2)+JumpFloorII(n-3)+…+JumpFloorII(2)+JumpFloorII(1)+JumpFloorII(0)
数组count[i]保存到达第i个台阶时的总的跳法

public int jumpFloorII(int n) {
        int[] count = new int[n + 1];
        count[0] = 1;
        count[1] = 1;
        for (int i = 2; i < count.length; i++) {
            for (int j = 0; j < i; j++) {
                count[i] += count[j];
            }
        }
        return count[n];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值