基础跳台阶

题目

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

解题思路

这道题就是斐波那契数列的变形问法,因为跳上第N个台阶有两种方式,第一个就是从第N-1个台阶上跳一级上来,第二个就是从第N-2个台阶上跳两级上来。

那么求到第N个台阶的方法就转变成求到第N-1台阶的办法和到第N-2个台阶的方法,将两者相加即可,所有f(n)=f(n-1)+f(n-2),唯一一点区别在于初始值,这里的初始值是

f(1) = 1;f(2)=2

可以用递归和非递归保存前一个结果两种方式来实现,具体可参考剑指offer系列中斐波那契那篇博文。

变态跳台阶

题目

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

解题思路

变态跳台阶相对于普通版本的跳台阶的改变在于第N个台阶不仅仅可以由第N-1和第N-2个台阶到达,它是可以从第它下面的任一个台阶到达,

所有f(n) = f(n-1)+f(n-2)+f(n-3)+...+f(2)+f(1)+1,最后一个台阶是可以直接从第0个台阶调到第N个台阶这种情况,继续推导

f(n) =  f(n-1)+f(n-2)+f(n-3)+...+f(2)+f(1)+1,f(n+1) = f(n)+f(n-1)+f(n-2)+f(n-3)+...+f(2)+f(1)+1 = 2*f(n)

f(1) = 1,f(2)=2=2*f(1)

当然还是可以用递归和非递归两种方式来解决

代码

递归

     public int JumpFloorII(int target) {
if(target==1){
return 1;
}else{
return 2*JumpFloorII(target-1);
}
}

非递归

     public int JumpFloorII(int target) {
int[] saveData = new int[target+1];
saveData[1] = 1;
for(int i=2;i<=target;i++){
saveData[i] = 2*saveData[i-1];
}
return saveData[target];
}

剑指offer:跳台阶问题的更多相关文章

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

    跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   分析同样为斐波那契数列边形这样的题肯定有公式 设 ...

  2. 剑指Offer 跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2;   AC代码 ...

  3. 剑指Offer——跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路分析 这个问题可以先从简单开始考虑,台阶只有1阶,只有1种跳法,台阶有2阶,有2种跳法:一种两 ...

  4. 用js刷剑指offer(跳台阶)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 牛客网链接 思路 这一题和斐波那契数列思路完全一样. 假如青蛙从第n个 ...

  5. 剑指offer--39. 跳台阶

    时间限制:1秒 空间限制:32768K 热度指数:375795 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). cla ...

  6. 剑指Offer-8.跳台阶(C++/Java)

    题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 实际上就是斐波那契数列的一个应用,青蛙跳上n级台阶的跳法数等于跳 ...

  7. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解

    面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...

  8. 《剑指offer》 跳台阶

    本题来自<剑指offer> 跳台阶 题目1: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: 同上一篇. C ...

  9. 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题

     本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...

  10. 【剑指offer】09-2跳台阶,C++实现

    原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 # 一只青蛙一次可以跳1级台阶,也可以跳2级.求该青蛙跳n级的台阶总共有多少种跳法. 2.思路 # 跳0级 ...

随机推荐

  1. 好用的npm包或者工具

    1.样式 classnames:https://github.com/JedWatson/classnames 2.随机数 uuid:https://github.com/kelektiv/node- ...

  2. [xsy3553]游戏

    题意:交互题,交互库有长为$n$的$01$串$S$,你可以用字符串$T$询问$\sum\limits_{i=1}^n[S_i=T_i]$,要求用$1030$次询问问出$S$,$n=5000$ 首先我们 ...

  3. 拥抱TF2.0的时代来了

    AI = 算法 + 实现 忘掉 tf 1.0吧!!! TPU tf 加速硬件 学习建议 忘记1.0 Tensorflow 和Pytorch 选择一个主修 Keras 逐渐淡出 TF.kreas Pyt ...

  4. turtle1

    #画风车 from turtle import * pensize(2) for i in range(4): seth(360-i*90) fd(150) rt(90) circle(-150,45 ...

  5. layui 自定义模块

    新建模块目录modules 新建common.js layui.define(['jquery'], function (exports) { var $ = layui.jquery; var ob ...

  6. mysql慢查询及查询优化

    mysql默认是没有开启慢查询的 1 查看慢查询的配置状态 show variables like 'slow_query%'; slow_query_log 慢查询开启状态 slow_query_l ...

  7. netcore发布失败

    2.2  发布Views  <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish> 导致 发布失败--------- ...

  8. C++ 二叉搜索树原理及其实现

    首先是概念:二叉搜索树又称二叉排序树,它具有以下的性质: 若是左子树不为空,则左子树上所有节点的值小于根节点的值 若是右子树不为空,则右子树上所有结点的值大于根节点的值 二叉搜索树的左右子树也是二叉搜 ...

  9. 小白的C++之路——结构体

    结构体与数组不同的是结构体能包含不同类型的数据,像一个综合性的仓库,更加灵活. #include <iostream> #include <string> #include & ...

  10. 测试代码的练习——python编程从入门到实践

    11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名.这个函数返回一个格式为City,Country的字符串,如Santiago,Chile.这个函数存储在一个名为city_fu ...