关闭

剑指offer--变态跳台阶

标签: 剑指offer-java实现面试在线编程
489人阅读 评论(0) 收藏 举报
分类:

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


思路:
当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;
当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;
当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法
Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;
当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法……………………..第一次跳出n阶后,后面还有 Fib(n-n)中跳法.
Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+……….+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-1)
又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-2)
两式相减得:Fib(n)-Fib(n-1)=Fib(n-1) =====》 Fib(n) = 2*Fib(n-1) n >= 2


代码:

public class Solution {
    static int[] dp = new int[10000];

    public int JumpFloorII(int target) {
        if ( target <= 0){
            return 0;
        }

        if ( target == 1){
            dp[target] = 1;
            return dp[target];
        }

        if (target == 2){
            dp[target] = 2;
            return dp[target];
        }

        for ( int i = 3 ; i <= target ; i++){
            dp[i] =  2 * dp[i-1];
        }

        return dp[target];
    }
}
0
0
查看评论

剑指offer--变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分类:数组 解法1: 关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2...
  • kangaroo835127729
  • kangaroo835127729
  • 2015-09-19 20:32
  • 1631

剑指offer--(9) 变态跳台阶

剑指offer–(9) 变态跳台阶问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路描述: f(n)=2f(n-1)
  • u012485480
  • u012485480
  • 2017-09-16 20:11
  • 89

剑指Offer:面试题6重建二叉树

重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 前序遍历:是先根节...
  • u012162920
  • u012162920
  • 2016-08-17 14:18
  • 220

剑指offer--变态跳台阶(巧用递归)

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法解题思路每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共用2^(n-1)中情况代码public int JumpFloorII(int target) { ...
  • qq_27687701
  • qq_27687701
  • 2017-01-10 09:54
  • 166

剑指Offer——重建二叉树——C++

重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路:根据前序第一个字符是...
  • hellozmz
  • hellozmz
  • 2016-11-25 10:52
  • 814

剑指Offer----变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路:根据数学归纳法可以得到F(n)=2*2*2...*2;(n-1个2) public class Solution { public int JumpFloorII(i...
  • u010013140
  • u010013140
  • 2017-07-09 21:17
  • 34

剑指offer---变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 可以根据数学归纳法得出,result = 2^(n - 1) java public class Solution { public int JumpFloorII(int ...
  • sinat_32547403
  • sinat_32547403
  • 2017-12-04 15:47
  • 46

剑指offer_9 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路: 没有明确的线索,采用数学归纳法: fn表示跳上n级台阶的方法数; f1=1,f2=2,f3=1+1+2=4; f4=1+3+2+1+1=8(一级一级有1种,一级两...
  • nalanmingdian
  • nalanmingdian
  • 2017-08-24 13:11
  • 43

剑指Offer-变态跳台阶

变态跳台阶题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路:   仔细分析一下可以发现问题数组的第n个的结果为:2^(n-1) 注意分析一下: n=0,return 0; n=1;有1种方法; ...
  • yannanying
  • yannanying
  • 2015-08-27 21:31
  • 345

剑指Offer------变态跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2)       &...
  • zy512638348
  • zy512638348
  • 2017-10-03 10:32
  • 87
    个人资料
    • 访问:155741次
    • 积分:4932
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:81条
    博客专栏
    最新评论