【剑指offer - C++/Java】9、变态跳台阶
题目链接:变态跳台阶
文章目录
- 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、变态跳台阶相关推荐
- 牛客网(剑指offer) 第九题 变态跳台阶
//题目描述 //一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloorII($numbe ...
- 剑指offer面试题[9-2]-变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 除了最后一个台阶,其余的台阶都有跳与不跳两种情况. 因此,假设有n个台 ...
- 剑指Offer (九):跳台阶问题进阶版(Java版)
问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这个问题明显是由跳台阶进阶而来,我们由于已经做过跳台阶问题,先进行简单分析. 首先 ...
- 牛客网(剑指offer) 第八题 跳台阶
//题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloor($number) {if($number ...
- 剑指Offer - 面试题10- II. 青蛙跳台阶问题
1. 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008 ...
- 剑指offer面试题10- II. 青蛙跳台阶问题(动态规划)(递归)(斐波那契数列)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...
- 剑指offer_递归与循环---变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) = ...
- 剑指Offer(java答案)
剑指Offer(java答案) 剑指Offerjava答案 3二维数组中的查找 4替换空格 5从尾到头打印链表 6重建二叉树 7用两个栈实现队列 8旋转数组的最小数字 9斐波那契数列 扩展1跳台阶 扩 ...
- 【剑指offer】Java版代码(完整版)
参考链接 [剑指offer]Java版代码(完整版)
- 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)
<剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...
最新文章
- pycharm报黄提示(黄色高亮警告):non-default parameter follows default parameter(定义时将没有默认值的参数放到了有默认值参数的后面)
- Django Web开发基础环境配置流程
- 并联系统的失效率公式推导_供暖系统水力平衡率对室温的影响
- 从另一个角度看大数据量处理利器:布隆过滤器
- golang操作mysql数据库(Go-SQL-Driver/MySQL)
- 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
- centos关闭邮件提醒
- 【VS开发】COM组件技术概述
- Vue进阶之表单控件绑定
- openai-gpt_GPT-3是“人类”吗?
- 【计算机网络】1概述
- java中的character_什么是Java Character类?Character类的常用方法详解
- 两台设备(手动)设置相同的局域网IP地址会怎么样?
- 5G NR的新特征—超低时延
- TDMS如何用Excel打开编辑
- FastDFS构成、特性、Linux下安装以及Java如何访问
- 解决nvcc --version显示command not found问题
- ZooKeeper - 四字命令解析
- 碧蓝航线服务器维护2020,《碧蓝航线》2020维护公告(5月14日10时)
- 全球及中国光通信箱体行业市场需求前景与发展规划分析报告2022-2028年
热门文章
- spring学习(51):对象的初始化和销毁
- 第十三期:你不想错过的那些JSON工具
- 第十七期:详解大数据处理中的Lambda架构和Kappa架构
- java学习(79):GUL聊天窗口
- 实例52:python
- USB/UART 串口转LoRa无线传输调试工具 评估套件
- Jupyter进阶教程
- python数据标准类型_Python的标准数据类型(下)
- python没有那个文件或目录_fatal error: Python.h: 没有那个文件或目录 解决方法
- MPP install