题目链接:变态跳台阶

文章目录

  • 1 题目描述
  • 2 题目分析
  • 3 代码
    • 3.1 动态规划算法
      • 3.11 Java代码
      • 3.12 C++代码
    • 3.2 递归算法
      • 3.21 Java代码
      • 3.22 C++代码
    • 3.3 直接求解 公式:f(n)=2^(n-1)^
      • 3.31 Java代码
      • 3.32 C++代码
  • 4 总结

1 题目描述

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

2 题目分析

假设f(n)代表青蛙跳上n级台阶的方法数。那么由于一次可以跳1级,也可以跳2级…它也可以跳n级。所以f(n)=f(n-1)+f(n-2)+…+f(1)+f(0);其中f(0)=1;根据这个式子可以写动态规划的算法

由上述公式知道:

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

将第二个式子合并到第一个式子得到:

f(n)=2*f(n-1); 根据这个式子可以写递归算法

又由上式知道:

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

得出:

f(n)=2n-1 根据这个式子可以直接求解。

下面我们就以上述三种方法写代码

3 代码

3.1 动态规划算法

3.11 Java代码

public class Solution {public int JumpFloorII(int target) {//动态规划// 不使用公式求解,采用动态规划if(target<=2)return target;int[] ret=new int[target+1];ret[0]=1;ret[1]=1;ret[2]=2;int i,j,tmp=0;for(i=3;i<=target;i++){for(j=0;j<i;j++){tmp+=ret[j];} ret[i]=tmp;tmp=0;}return ret[target];}
}

3.12 C++代码

class Solution {public:int jumpFloorII(int number) {// 不使用公式求解,采用动态规划if(number==0)return 0;int ret[number+1];ret[0]=1;ret[1]=1;ret[2]=2;int i,j,tmp=0;for(i=3;i<=number;i++){for(j=0;j<i;j++){tmp+=ret[j];} ret[i]=tmp;tmp=0;}return ret[number];}
};

3.2 递归算法

3.21 Java代码

public class Solution {public int JumpFloorII(int target) {//采用递归求解 f(n)=2*f(n-1);if(target==0)return 0;if(target==1)return 1;return 2*JumpFloorII(target-1);}
}

3.22 C++代码

class Solution {public:int jumpFloorII(int number){//采用递归求解 f(n)=2*f(n-1);if(number==0)return 0;if(number==1)return 1;return 2*jumpFloorII(number-1);}
};

3.3 直接求解 公式:f(n)=2(n-1)

3.31 Java代码

public class Solution {public int JumpFloorII(int target) {//采用公式求解 f(n)=2^(n-1)if(target==0)return 0;//return (int)pow(2,number-1); 直接返回这一句不要下面的代码也可以int ret=1;int i;for(i=1;i<target;i++)ret*=2;return ret;}
}

3.32 C++代码

class Solution {public:int jumpFloorII(int number) {//采用公式求解 f(n)=2^(n-1)if(number==0)return 0;//return (int)pow(2,number-1);int ret=1;int i;for(i=1;i<number;i++)ret*=2;return ret;}
};

4 总结

理解上述公式的推导过程

探讨学习加:
个人qq:1126137994
个人微信:liu1126137994

【剑指offer - C++/Java】9、变态跳台阶相关推荐

  1. 牛客网(剑指offer) 第九题 变态跳台阶

    //题目描述 //一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloorII($numbe ...

  2. 剑指offer面试题[9-2]-变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 除了最后一个台阶,其余的台阶都有跳与不跳两种情况. 因此,假设有n个台 ...

  3. 剑指Offer (九):跳台阶问题进阶版(Java版)

    问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这个问题明显是由跳台阶进阶而来,我们由于已经做过跳台阶问题,先进行简单分析. 首先 ...

  4. 牛客网(剑指offer) 第八题 跳台阶

    //题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloor($number) {if($number ...

  5. 剑指Offer - 面试题10- II. 青蛙跳台阶问题

    1. 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008 ...

  6. 剑指offer面试题10- II. 青蛙跳台阶问题(动态规划)(递归)(斐波那契数列)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  7. 剑指offer_递归与循环---变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = ...

  8. 剑指Offer(java答案)

    剑指Offer(java答案) 剑指Offerjava答案 3二维数组中的查找 4替换空格 5从尾到头打印链表 6重建二叉树 7用两个栈实现队列 8旋转数组的最小数字 9斐波那契数列 扩展1跳台阶 扩 ...

  9. 【剑指offer】Java版代码(完整版)

    参考链接 [剑指offer]Java版代码(完整版)

  10. 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)

    <剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...

最新文章

  1. pycharm报黄提示(黄色高亮警告):non-default parameter follows default parameter(定义时将没有默认值的参数放到了有默认值参数的后面)
  2. Django Web开发基础环境配置流程
  3. 并联系统的失效率公式推导_供暖系统水力平衡率对室温的影响
  4. 从另一个角度看大数据量处理利器:布隆过滤器
  5. golang操作mysql数据库(Go-SQL-Driver/MySQL)
  6. 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
  7. centos关闭邮件提醒
  8. 【VS开发】COM组件技术概述
  9. Vue进阶之表单控件绑定
  10. openai-gpt_GPT-3是“人类”吗?
  11. 【计算机网络】1概述
  12. java中的character_什么是Java Character类?Character类的常用方法详解
  13. 两台设备(手动)设置相同的局域网IP地址会怎么样?
  14. 5G NR的新特征—超低时延
  15. TDMS如何用Excel打开编辑
  16. FastDFS构成、特性、Linux下安装以及Java如何访问
  17. 解决nvcc --version显示command not found问题
  18. ZooKeeper - 四字命令解析
  19. 碧蓝航线服务器维护2020,《碧蓝航线》2020维护公告(5月14日10时)
  20. 全球及中国光通信箱体行业市场需求前景与发展规划分析报告2022-2028年

热门文章

  1. spring学习(51):对象的初始化和销毁
  2. 第十三期:你不想错过的那些JSON工具
  3. 第十七期:详解大数据处理中的Lambda架构和Kappa架构
  4. java学习(79):GUL聊天窗口
  5. 实例52:python
  6. USB/UART 串口转LoRa无线传输调试工具 评估套件
  7. Jupyter进阶教程
  8. python数据标准类型_Python的标准数据类型(下)
  9. python没有那个文件或目录_fatal error: Python.h: 没有那个文件或目录 解决方法
  10. MPP install