剑指Offer面试题:12.变态跳台阶

一、题目
————————————————
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级... 它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
————————————————
图片说明
————————————————
二、思路
————————————————
数学推导
跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去...,那么

f(n-1) = f(n-2) + f(n-3) + ... + f(0)

同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去... ,那么

f(n) = f(n-1) + f(n-2) + ... + f(0)

综上可得

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

所以 f(n) 是一个等比数列
————————————————
三、解决问题
————————————————
测试用例
  1.功能测试(3,5,8等)

  2.边界值测试(0,1,2等)

  3.性能测试(50,100等)

  4.特殊(0、负数)
————————————————

package swordoffer;

/**
 * @author LQ
 * @version 1.0
 * @date 2020-03-15 20:09
 */

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

public class Solution12 {
    public static void main(String[] args) {
        Solution12 demo = new Solution12();
        System.out.println(demo.JumpFloorII(1));
        System.out.println(demo.JumpFloorII(2));
        System.out.println(demo.JumpFloorII(8));
        System.out.println(demo.JumpFloorII(50));
        System.out.println(demo.JumpFloorII(100));
        System.out.println(demo.JumpFloorII(0));
    }
    public int JumpFloorII(int target) {
        if(target < 1){
            //当target<0,不符合约束条件
            throw new RuntimeException("下标错误,应从1开始!");
        }
        return (int) Math.pow(2, target - 1);
    }
}

————————————————
图片说明
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。

Java基础 文章被收录于专栏

建立本人的Java基础技术栈积累库

全部评论

相关推荐

09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务