剑指offer-跳台阶

原创 2018年04月15日 15:25:17

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

题目很简单,一个递归搞定。

public class Solution {
    int count=0;
    public int JumpFloor(int target) {
        if(target==0) {count++;return 0;}
        if(target<0)return 0;
        JumpFloor(target-1);
        JumpFloor(target-2);
        return count;
    }
}

考虑到递归太耗时(1230ms),改为迭代,通过递推,其实发现这是类似一个斐波那契数列:
a1=1
a2=2
a3=a(3-1)+a(3-2)=3
a4=a(3)+a(2)=5

public class Solution {
    public int JumpFloor(int target) {
        if(target==1||target==2)return target;
        int st1=1,st2=2,sum=0;
        while(target-2>0) {
            sum=st1+st2;
            st1=st2;
            st2=sum;
            target--;
        }
        return sum;

    }
}

耗时急剧减小(16ms),所以对时间有要求的面试题还是少用递归。

这里附上他人的解答,讲得很清楚:

1.假设当有n个台阶时假设有f(n)种走法。
2.青蛙最后一步要么跨1个台阶要么跨2个台阶。
3.当最后一步跨1个台阶时即之前有n-1个台阶,根据1的假设即n-1个台阶有f(n-1)种走法。
4. 当最后一步跨2个台阶时即之前有n-2个台阶,根据1的假设即n-2个台阶有f(n-2 )种走法。
5.显然n个台阶的走法等于前两种情况的走法之和即f(n)=f(n-1)+f(n-2)。
6.找出递推公式后要找公式出口,即当n为1、2时的情况,显然n=1时f(1)等于1,f(2)等于2
——- | 1, (n=1)
f(n) = |2, (n=2)
——–| f(n-1)+f(n-2) ,(n>2,n为整数)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwzsdy/article/details/79949653

【剑指offer】变态跳台阶

斐波那契序列的变种,简单题,在九度OJ上测试通过。 时间限制:1 秒 内存限制:32 兆 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-09 09:52:08
  • 3189

剑指Offer--039-二叉树的深度

链接 牛客OJ:二叉树的深度 九度OJ:http://ac.jobdu.com/problem.php?pid=1350 GitHub代码: 039-二叉树的深度 C...
  • gatieme
  • gatieme
  • 2016-05-07 20:39:04
  • 1366

【剑指offer】二叉树的深度

题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 方法一分析:主要思想就是层序遍历,就是有遍历上一层的每一个节点,得到下...
  • cdwxx1234
  • cdwxx1234
  • 2017-07-15 14:27:07
  • 180

剑指offer:跳台阶(循环和递归)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析: 考虑1个台阶,只有1跳法,则 f(1) = 1 考虑2个台阶,可以...
  • fengsser
  • fengsser
  • 2015-06-29 10:05:16
  • 1212

剑指Offer-跳台阶

跳台阶题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路:   其实仔细分析一下,可以发现这是一个类似斐波那契数列的数组,数组...
  • yannanying
  • yannanying
  • 2015-08-27 21:30:38
  • 412

牛客网刷题--剑指offer(两个栈实现队列)

牛客网给出的题目要求是用两个栈数据结构实现一个队列的push和pop操作。 两个栈实现队列这是很好理解的。因为栈的特性是后进先出(LIFO),而队列的特性是先进先出(FIFO),那两个栈连在一块儿,...
  • liu_sheng_1991
  • liu_sheng_1991
  • 2016-06-29 17:56:24
  • 439

牛客网剑指offer-用两个栈实现一个队列

思路:有两个栈,栈1和栈2.当入栈的时候,我们将它全放进栈1中,当需要出栈的时候,我们将栈1出栈到栈2中,然后再将栈2依次出栈。出完栈之后,再把stack2中的数pop出push到stack1,接受下...
  • Suyebiubiu
  • Suyebiubiu
  • 2017-12-12 15:46:19
  • 82

剑指offer-跳台阶-DP

问题题目:[跳台阶]思路初值为1,1 建模后的到,N阶楼梯的走法: F[N]=F[N−1]+F[N−2](1)F[N] = F[N-1] + F[N-2] \tag{1}代码class Solu...
  • Kang_TJU
  • Kang_TJU
  • 2017-02-11 15:04:16
  • 86

牛客网剑指offer-跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution { public: int dp[40]; bool f...
  • yhn19951008
  • yhn19951008
  • 2018-02-24 23:18:54
  • 11

牛客网 剑指offer-跳台阶

问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 写出前四项之后,就会发现这是一个斐波那契数列,该项等于前两项之和,代码如下: public...
  • hua_wenwen
  • hua_wenwen
  • 2017-09-21 15:08:12
  • 203
收藏助手
不良信息举报
您举报文章:剑指offer-跳台阶
举报原因:
原因补充:

(最多只允许输入30个字)