剑指offer之面试题9-3:变态跳台阶
2016-04-18 15:06
302 查看
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:用数学归纳的思想,分析得出规律。
台阶数为1,先跳一阶,剩下的跳法为f(1-1)=f(0)。
台阶数为2,先跳一阶,剩下的跳法为f(2-1)=f(1);先跳2阶,剩下的跳法为f(2-2)=f(0),由加法原理,f(2)=f(1)+f(0)
……
台阶数为n,先跳一阶,剩下的跳法为f(n-1),…,先跳n-1阶剩下的跳法为f(1),先跳n阶,剩下的跳法为f(0),由加法原理,f(n)=f(n-1)+…+f(1)+f(0)=2*f(n-1)
经过以上分析,可得到如下代码,牛客网成功提交:
递归方法
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:用数学归纳的思想,分析得出规律。
台阶数为1,先跳一阶,剩下的跳法为f(1-1)=f(0)。
台阶数为2,先跳一阶,剩下的跳法为f(2-1)=f(1);先跳2阶,剩下的跳法为f(2-2)=f(0),由加法原理,f(2)=f(1)+f(0)
……
台阶数为n,先跳一阶,剩下的跳法为f(n-1),…,先跳n-1阶剩下的跳法为f(1),先跳n阶,剩下的跳法为f(0),由加法原理,f(n)=f(n-1)+…+f(1)+f(0)=2*f(n-1)
经过以上分析,可得到如下代码,牛客网成功提交:
import java.util.Arrays; public class Solution { public static int JumpFloorII(int target) { int[] result={1,1,2}; result=Arrays.copyOf(result, target+1); if(target<=2) return result[target]; for(int i=3;i<=target;i++){ int temp=0; for(int j=0;j<i;j++){ temp=temp+result[j]; } //System.out.println(temp); result[i]=temp; } return result[target]; } public static void main(String[] args){ int target=10; System.out.println(JumpFloorII(target)); } }
递归方法
import java.util.Arrays; public class Solution { public static int JumpFloorII(int target) { if(target <= 0) return -1; if(target == 1) return 1; return 2 * JumpFloorII(target - 1); } }
相关文章推荐
- 【小松教你手游开发】【面试必读(编程基础)】C#委托浅析与漫谈
- 多线程的40个面试题总结(上)
- 剑指offer之面试题9-2:跳台阶
- 栈的java实现和栈的应用举例(华为面试)
- 面试题88:二叉树中结点的最大距离
- 剑指offer之面试题9:斐波那契数列
- 一名优秀程序员具备的15个特质
- 面试大全
- 一个程序员的奋斗史-莫雨
- <<程序员面试宝典>>读书笔记 1
- 2016年软考程序员模拟预测习题20题
- 2016软考程序员试题选择题(含答案解析)
- 操作系统常见面试题
- 产品和程序员 对话
- 【笔试/面试】—— 数组中第二大的数
- BAT面试笔记
- 【笔试/面试】—— 判断一个链表是否有环
- Java高级面试题积累(二)
- 网易游戏2015年暑期实习生面试经历-游戏研发project师
- 百度面试题:malloc/free 与 new/delete 的区别