剑指Offer——变态跳台阶

题目描述

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

解题思路

1、这道题有规律可循,当n等于0或者1的时候,跳法都只有1种。如果是n级的话,假设方法有f[n]种,那么当n-1级的时候,假设方法有f[n-1]种方法,当n-2级的时候,有f[n-2]种方法,依此类推,我们可以得到一个关系式f[n] = f[n-1] + f[n-2] + … + f[0];f[n-1] = f[n-2] + f[n-3] + … + f[0],将这两个式子化简,可得到,f[n]=2f[n-1];
2、这样可以推导出f[2]=2f[1];f[3]=2(2f[1]);f[4]=2(2*(2*f[1]));这样就已经发现规律了。
3、代码实现上面,可以利用循环,也可以利用递归。两个方法都能实现。

参考代码

package 剑指offer.simple;

/**

 * 变态跳台阶
 * 题目描述
 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 */

public class t_4 {

    public static void main(String[] args) {

        System.out.println(Math.pow(3,2));
    }

    public class Solution {
        public int JumpFloorII(int target) {
            if(target==0||target==1)
            {
                return 1;
            }
            else
            {

                return (int) Math.pow(2,target-1);
            }
        }

        public int JumpFloorII2(int target) {
            if(target==0||target==1)
            {
                return 1;
            }
            int a=1;


                for(int i=2;i<=target;i++)
                {
                    a*=2;

                }
            return a;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值