美文网首页剑指Offer-Python-牛客网
面试题10.3:变态跳台阶

面试题10.3:变态跳台阶

作者: 凌霄文强 | 来源:发表于2019-01-04 14:32 被阅读0次

    题目描述

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

    知识点

    递归,循环

    Qiang的思路

    这道题算是面试题10.2的升级版,10.2说的是青蛙一次只能跳一个或者是两个,现在牛逼了,多少都能跳(你咋不上天呢)。

    对于上一个问题,我们维护了两个整数空间用来保存上一时刻和上上时刻的状态数,推广过来,我们现在只需要维护一个n个整数空间的状态数组就能够解决该问题了。

    # -*- coding:utf-8 -*-
    class Solution:
        def jumpFloorII(self, number):
            # write code here
            count = [1,1]
            for i in range(2,number+1):
                count.append(0)
                for j in range(0,i):
                    count[-1]+=count[j]
            return count[number]
    

    我这个想法完全继承自上一题的思路,还是非常简单的。


    Book中的思路

    这道题在书中没有占很多的篇幅,仅有短短的三行字,但是他给出了一个结论:

    f(n)=2^{n-1}

    关于该结论的证明可以通过如下的两个小式子得到:

    \begin{aligned} 2^0+2^0+2^1+2^2+2^3+...+2^{n-1}&=2^n\\ 2^0+2^0+2^1+2^2+2^3+...+2^{n-1}+2^n&=2^n+2^n=2 \cdot 2^n=2^{n+1}\\ \end{aligned}

    这个结论恰恰是该问题的结果,有时我们在做题时可能就陷入了一个误区,用这方法用那方法,可能通过分析,问题刚刚可以转化为一个简单的数学问题,然后答案呼之欲出。

    # -*- coding:utf-8 -*-
    class Solution:
        def jumpFloorII(self, number):
            # write code here
            if number==0:
                return 1
            return 1<<(number-1)
    

    代码实现起来是非常简单的。


    作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com
    个人网站:https://www.myqiang.top

    相关文章

      网友评论

        本文标题:面试题10.3:变态跳台阶

        本文链接:https://www.haomeiwen.com/subject/bbwhrqtx.html