剑指offer_递归与循环---变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:
f(1) = 1
f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。
f(3) = f(3-1) + f(3-2) + f(3-3)
…
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)
说明:
1)这里的f(n) 代表的是n个台阶有一次1,2,…n阶的 跳法数。
2)n = 1时,只有1种跳法,f(1) = 1
3) n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2)
4) n = 3时,会有三种跳得方式,1阶、2阶、3阶,
那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3)
因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)
5) n = n时,会有n中跳的方式,1阶、2阶…n阶,得出结论:
f(n) = f(n-1)+f(n-2)+…+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + … + f(n-1)
6) 由以上已经是一种结论,但是为了简单,我们可以继续简化:
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)
7) 得出最终结论,在n阶台阶,一次有1、2、…n阶的跳的方式时,总得跳法为:
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)
代码实现
/*** */
package 递归和循环;/*** <p>* Title:JumpFloorII* </p>* <p>* Description:* </p>* * @author 田茂林* @data 2017年8月23日 上午11:45:07*/
public class JumpFloorII {public int JumpFloor(int target) {if (target < 0) {return -1;} else if (target == 0) {return 1;} else if (target == 1) {return 1;} else {return 2 * JumpFloor(target - 1);}}}
剑指offer_递归与循环---变态跳台阶相关推荐
- 剑指offer_递归与循环---跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 1,用递归,将问题转换为f(n)=f(n-1)+f(n-2); 2,用迭代,原理类似 代 ...
- 剑指offer_第8题_跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级. 求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 理解 完全蒙啊 那我们就用特例先分析一下 如果有1级台阶,那有1种 如 ...
- 牛客网(剑指offer) 第九题 变态跳台阶
//题目描述 //一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. <?phpfunction jumpFloorII($numbe ...
- 剑指offer面试题[9-2]-变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 除了最后一个台阶,其余的台阶都有跳与不跳两种情况. 因此,假设有n个台 ...
- 剑指Offer (九):跳台阶问题进阶版(Java版)
问题,一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这个问题明显是由跳台阶进阶而来,我们由于已经做过跳台阶问题,先进行简单分析. 首先 ...
- 剑指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级的台阶总共有多少种跳法. <?phpfunction jumpFloor($number) {if($number ...
- 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------剑指offer系列
题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...
最新文章
- 【分块】#6284. 数列分块入门 8(区间赋值为相同的值,查询区间某值个数)
- Excel提取超链接信息
- 如何使用:before和:after伪元素?
- 设计sample语言的词法分析器_重现木兰编程语言(十)——比较、循环,一个语法设计特色
- CentOS 7镜像下载和安装教程
- YouTube、微博、今日头条齐齐发力,短视频平台如何打造头部内容、做好用户留存?
- linux查看网卡的驱动命令行,Linux下查看网卡驱动和版本信息
- 蒙特卡洛法求圆周率 c语言,c++蒙特卡洛法求圆周率
- HDU 1083 Courses 匹配
- 邮件的常规备份与恢复存储组备份
- MacOS下AndroidStudio无法启动
- 鸿蒙2.0 134个仓库扼要说明
- Java后端实现Excel导出,及添加Excel文件标题样式
- mysql教程 check_Check
- ECDSA 签名验证原理及C语言实现
- html水平线 虚线
- 上市前股权激励的方式有哪些
- QQ音乐JS逆向爬虫,我用python全都爬!
- [文摘201009]演讲录全文:美国世界帝国战略与中国的危机 - 戴旭
- create_generated_clock invert preinvert shift_edge是否符合设计真实状态很重要【示例2】
热门文章
- excel中用正则匹配_Excel利用正则表达式匹配和替换内容
- 算法训练 逗志芃的危机
- Android aab的打包、调试、安装
- 康普分享未来网络四大趋势 光纤将是最佳主角
- 计算机学院职业规划大赛策划书,大学生职业生涯规划大赛策划书(策划书范文).doc...
- BAPI创建CLASS和CHARACTERISTICS
- Pandas数据分析实战01--Abalone Data Set(鲍鱼数据集)
- Linux traceroute no reply
- Mac OS X 10.7.5 Lion 系统安装 U 盘制作
- 【java8】并行流Stream