剑指offer(9):跳台阶问题
2016-04-25 11:10
411 查看
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
这种问题的思路一般是采用数学归纳法,当n=1时,只有一种跳法;当n=2时,青蛙可以一次跳2级,也可以一次跳两级,需要跳两次,所以有两种跳法。
考虑一般的情况。n级台阶的跳法为f(n)f(n),n>2时,第一次跳有两种不同选择:只跳1级,则后面的跳法为f(n−1)f(n-1);如果第一次跳2级,则后面的跳法为f(n−2)f(n-2),因此总跳法为f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2),即斐波那契数列。
牛客AC代码:
问题扩展:变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
类似于上面的分析,有n中跳法,则:
f(n)=f(n−1)+f(n−2)+f(n−3)+...+f(1)f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1)
f(n−1)=f((n−1)−1)+f((n−1)−2)+...+f(1)f(n-1) = f((n-1)-1) + f((n-1)-2) + ... + f(1)
=f(n−2)+f(n−3)+...+f(1);= f(n-2) + f(n-3) + ... + f(1);
则:f(n)=2∗f(n−1)f(n) = 2*f(n-1)
牛客AC代码:
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
这种问题的思路一般是采用数学归纳法,当n=1时,只有一种跳法;当n=2时,青蛙可以一次跳2级,也可以一次跳两级,需要跳两次,所以有两种跳法。
考虑一般的情况。n级台阶的跳法为f(n)f(n),n>2时,第一次跳有两种不同选择:只跳1级,则后面的跳法为f(n−1)f(n-1);如果第一次跳2级,则后面的跳法为f(n−2)f(n-2),因此总跳法为f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2),即斐波那契数列。
牛客AC代码:
public int JumpFloor(int target) { if(target <= 0) return 0; if(target <= 2) return target; int f1 = 1; int f2 = 2; int fn = 0; for(int i = 3; i <= target; i++) { fn = f1 + f2; f1 = f2; f2 = fn; } return fn; }
问题扩展:变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
类似于上面的分析,有n中跳法,则:
f(n)=f(n−1)+f(n−2)+f(n−3)+...+f(1)f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1)
f(n−1)=f((n−1)−1)+f((n−1)−2)+...+f(1)f(n-1) = f((n-1)-1) + f((n-1)-2) + ... + f(1)
=f(n−2)+f(n−3)+...+f(1);= f(n-2) + f(n-3) + ... + f(1);
则:f(n)=2∗f(n−1)f(n) = 2*f(n-1)
牛客AC代码:
public class Solution { public int JumpFloorII(int target) { if(target <= 0) return 0; if(target <= 2) return target; int f = 2; int fn = 0; for(int i = 3; i <= target; i++) { fn = 2 * f; f = fn; } return fn; } }
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
相关文章推荐
- ButterKnife--View注入框架
- 嵌套json解析
- zepto.js入门到精通(一)
- 第一章之初识Bootstrap
- DOM之重新介绍CSS的定位
- Bootstrap学习速查表(一) 理论基础
- js验证上传文件大小、图片类型限制
- Caused by: org.xml.sax.SAXParseException: The reference to entity "characterEncoding" must end with the ';' delimiter.
- jq中的css-Dom
- js的字符编码
- 第二章之Bootstrap 页面排版样式
- sharepreference存储心得
- Feescale K64开发笔记2: KDS的使用
- 剑指offer(8):斐波那契数列
- javascript中的=,==,===到底有什么区别呢
- 前端开发框架对比
- 【转】外国朋友出的js题目,你能对几道
- 第三章之Bootstrap 表格与按钮功能
- JQuery iframe页面通过parent方法操作父页面中的元素与方法(实例讲解)
- Javascript 地图库收集