剑指Offer (九):跳台阶问题进阶版(Java版)
问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这个问题明显是由跳台阶进阶而来,我们由于已经做过跳台阶问题,先进行简单分析。
首先可知,第一阶台阶只会有一种跳法;,第二阶可能有两种跳法,分别为两次一步、一次两步两种。
若楼梯阶级 n = 3
跳 1 步到 3:剩下的是第二步没跳,起始跳到第二步只有两种种
跳 2 步到 3:,剩下的是第一步没跳,起始跳到第一步只有一种
跳 3 步到 3:剩下0步没跳,所以只有一种跳法
所以得出结论,若三级台阶,则跳法一共有 1 + 1 + 2 = 4种,可以得出以下结论
f(3) = f(2) + f(1) + 1;
当然,我们还可以继续分析台阶级数为四,为五的情况,最终可以通过分类讨论,得出以下结论:
若楼梯阶级 n (n >= 3)
跳 1 步到 n:剩下的是第 n - 1 步没跳,起始跳到第 n - 1 步设它为 pre1 种
跳 2 步到 n:剩下的是第 n - 2 步没跳,起始跳到第 n - 2 步设它为 pre2 种
跳 3 步到 n:剩下的是第 n - 3 步没跳,起始跳到第 n - 3 步设它为 pre3 种
....
一直到 跳n-1到n:剩下的是第 1 步没跳,起始跳到第 n - 1 步就只有一种跳法。
最终得出以下结论
f(n) = f(n-1) + f(n-2) +...+ f(1) + 1;
f(n -1) = f(n-2) +...+ f(1) + 1;
两者相减 则 f(n) - f(n -1) = f(n-1) -> f(n) = 2f(n-1);
得到计算公式,f(n) = 2f(n-1) (n >=2 ),得到公式以后,解决方案就变得很简单了。
所以解决方案也有两者方法,一种递归,一种利用公式进行循环运算。
第一种解决方案,便是采用递归的方式,代码如下
public static int firstJumpFloorN(int target) {if(target < 0){return 0;}if(target == 1){return 1;}return firstJumpFloorN(target - 1 ) * 2;}
第二种便是类似于斐波拉契数列,代码如下
public static int secondJumpFloorN(int target) {if(target < 0){return 0;}if(target == 1){return 1;}int one = 1;int two = 2;for (int i = 2; i <= target; i++){two = one * 2;one = two;}return two;}
完整代码如下
public class MainJumpFloorN {public static void main(String[] args) {}/*** 递归调用* @param target* @return*/public static int firstJumpFloorN(int target) {if(target < 0){return 0;}if(target == 1){return 1;}return firstJumpFloorN(target - 1 ) * 2;}/*** 累加调用* @param target* @return*/public static int secondJumpFloorN(int target) {if(target < 0){return 0;}if(target == 1){return 1;}int one = 1;int two = 2;for (int i = 2; i <= target; i++){two = one * 2;one = two;}return two;}}
剑指offer 牛客网原文地址
剑指Offer (九):跳台阶问题进阶版(Java版)相关推荐
- 剑指offer:跳台阶 python 实现
题目 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 解题思路 草稿上想了想,这道题跟剑指offer: 斐波那契数列 ...
- 剑指Offer #08 跳台阶(递推)
题目来源:牛客网-剑指Offer专题 题目地址:跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 题目解析 这是 ...
- 剑指OFFER之跳台阶(九度OJ1388)
2019独角兽企业重金招聘Python工程师标准>>> 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多 ...
- 剑指offer青蛙跳台阶问题
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. //递归方式 public static int f(int n) { //参数合法性验证 ...
- 剑指offer: 变态跳台阶 python实现
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 大概推了一下,当number=1时,res=1:number=2时,re ...
- 剑指offer八:跳台阶
package com.jianzhioffer;public class JumpFloor {public static void main(String[] args){int res = Ju ...
- 剑指offer——变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 两种方法,第一种比较直观,第二种比较直接. 第一种:f(1)=1; f(2 ...
- python剑指offer跳台阶_【剑指offer】跳台阶I和II(Javapython)
关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数. f(3) = f(3-1) + f ...
- 《剑指offer》跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析:第n阶台阶要么由第n-1阶跳来,要么由n-2阶跳来,所有总共有f(n)=f(n-1)+f(n-2 ...
- 剑指offer 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = 1 f( ...
最新文章
- html给图片做绝对定位,有关绝对定位的全面理解
- Linux与JVM的内存关系分析
- http 400错误
- 海盗云商插件_推销自己的海盗猫王运营商
- 面试问题(工作动机、个人愿望 )
- C 语言学习:班级同学的博客地址列表
- jeesit 部署404
- 医院HIS系统厂家统计
- 实验二 语法分析1——递归子程序法
- cocosCreator关闭多点触摸的问题
- 新视智科“5G+工业互联网”产品线南山研发中心揭牌成立,助力制造业转型创新发展
- 3090显卡 爆显存调试
- 【AI每日播报】马云启动NASA计划 Intel150亿美元收购Mobileye
- 想自由查看自己网站每个页面流量情况?这个工具可以满足需求!
- 【语义分割】语义分割经典模块
- Nginx反向代理https
- 详解EJB技术及实现原理
- php3d按钮,css3实现3D按钮效果的文章推荐
- 怎样使用计算机的桌面助手,360安全卫士如何整理电脑桌面?360桌面助手使用说明...
- 中华云盒M1刷Linux教程,最给力的ROOT工具-AMLogic系列盒子刷机教程及ROOT-Amlogic 8726-奇珀网...
热门文章
- win10系统打开更新服务器失败怎么回事,如何修复Windows Update组件以解决Win10无法自动更新的问题?...
- 解决Field ‘id‘ doesn‘t have a default value 问题
- 2022暑期杭电第八场
- windows下设置GPU加速tensorflow运算(GT940M)
- 数据标签体系与用户画像
- OA行业分析:实施政务OA办公系统的好处
- 安装MATLAB_R2013b_X64_x32激活及破解方法
- 电涡流传感器线性灵敏度
- 金融IT的“困”与“道”
- bu薪水 华为cloud_【华为】CLOUDBU 华为云数据库工程师招聘 - 软件与微电子学院(SSM)版 - 北大未名BBS...